VamsiPenta Ответов: 1

Как программно отключить определенную ячейку в datagrid WPF


Я столкнулся с проблемой отключения всех ячеек в столбце со значением "один", я могу прочитать строку из datagrid, но не могу сделать эту частичную ячейку отключенной. Пожалуйста, дайте мне знать, если есть решение для этого.

У меня есть вся информация о строках и столбцах, где у меня есть значения, но я не могу отключить эту точную ячейку.

Заранее спасибо

Что я уже пробовал:

Я пытался пройти через строки или столбцы, как мы это делаем в datagridview, но здесь это не работало.

[no name]

"то, что мы делаем в datagridview, здесь не работает", конечно, нет. WPF-это не то же самое, что Winforms. Вы получаете ячейку, идя по визуальному дереву, пока не найдете нужную ячейку, а затем отключаете ее.

Pete O'Hanlon

Что вы подразумеваете под инвалидностью? Вы пытаетесь отключить текстовое поле в вашей DataGrid?

VamsiPenta

да, я пытаюсь отключить флажок в ячейке

Pete O'Hanlon

У вас есть флажок со значением "один" за ним? Контролируется ли флажок другой ячейкой в той же строке?

VamsiPenta

да, он был основан на другой колонке в той же строке

1 Ответов

Рейтинг:
9

Pete O'Hanlon

Ладно, вот как ты это сделаешь. Предположим, у вас есть следующая модель:

public class Data
{
  public bool IsChecked { get; set; }
  public string Value { get; set; }
}
Теперь это выставляется на DataGrid в ViewModel, как это:
public ObservableCollection<Data> Items { get; } = new ObservableCollection<Data>();

private void Populate()
{
  Items.Add(new Data() { IsChecked = true, Value = "One" });
  Items.Add(new Data() { IsChecked = true, Value = "One" });
  Items.Add(new Data() { IsChecked = true, Value = "Two" });
  Items.Add(new Data() { IsChecked = true, Value = "One" });
  Items.Add(new Data() { IsChecked = true, Value = "Three" });
  Items.Add(new Data() { IsChecked = true, Value = "One" });
  Items.Add(new Data() { IsChecked = true, Value = "One" });
}
Все это очень просто. Теперь последний кусочек головоломки - это то, как мы создаем нашу жизнь. DataGrid В частности, мы собираемся создать CheckBoxStyle стиль, который мы используем в качестве нашего ElementStyle для DataGridCheckBoxColumn и этот стиль будет иметь DataTrigger это реагирует на содержание нашего Value свойство в нашей модели данных. Итак, мы заканчиваем с этим XAML
<DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="False" ItemsSource="{Binding Items}">
  <DataGrid.Resources>
    <Style TargetType="{x:Type CheckBox}" x:Key="CheckBoxStyle">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Value}" Value="One">
          <Setter Property="IsEnabled" Value="False" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </DataGrid.Resources>
  <DataGrid.Columns>
    <DataGridCheckBoxColumn Binding="{Binding IsChecked}" ElementStyle="{StaticResource CheckBoxStyle}" />
    <DataGridTextColumn Binding="{Binding Value}" />
  </DataGrid.Columns>
</DataGrid>
Все так просто.