Я привязываю DataGrid к списку, у которого есть свойство boolen «IsSelected».WPF DataGrid SelectAll Флажок с двусторонней привязкой
public partial class MainWindow : Window
{
List<BaselineEntity> _blRecs;
public MainWindow()
{
InitializeComponent();
_blRecs = new List<BaselineEntity>();
_blRecs.Add(new BaselineEntity{EntityId = "Yada_Yada_1", IsSelected = false});
_blRecs.Add(new BaselineEntity{EntityId = "Yada_Yada_2", IsSelected = false});
_blRecs.Add(new BaselineEntity{EntityId = "Yada_Yada_2", IsSelected = false});
ChangedBlRecsGridView.ItemsSource = _blRecs;
}
}
Если класс BaselineEntity определяется как:
internal class BaselineEntity
{
public string EntityId {get; set;}
public bool IsSelected { get; set; }
}
Часть XAML это
<DataGrid Name="ChangedBlRecsGridView"
ItemsSource="{Binding _blRecs, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Entity Id" Binding="{Binding EntityId}"></DataGridTextColumn>
<DataGridTemplateColumn Width="30">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.Header>
<CheckBox Name="chkSelectAll" Checked="chkSelectAll_Checked" Unchecked="chkSelectAll_Unchecked"></CheckBox>
</DataGridTemplateColumn.Header>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Где обработчики событий для проверяемых и непроверяемых событий Select-All флажком являются например:
private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
{
foreach (BaselineEntity enty in ChangedBlRecsGridView.ItemsSource)
{
enty.IsSelected = true;
}
}
private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
{
foreach (BaselineEntity enty in ChangedBlRecsGridView.ItemsSource)
{
enty.IsSelected = false;
}
}
Я знаком с MVVM, и я знаю, что не придерживался каких-либо лучших практик (например, внедрение viewModel), потому что я только начинаю работу с WPF.
Check and Uncheck обработчики событий устанавливают и возвращают свойство IsSelected, но представление НЕ обновляется об этом изменении. Похоже, что предполагаемое двухстороннее связывание каким-то образом не происходит.
Я предполагаю, что я должен был реализовать класс BaselineEntity с некоторым интерфейсом, чтобы нажимать уведомления на представление (это то, что я ожидал бы от своих нескольких рабочих знаний о нокауте js, но не смог найти, что это после расходование часов).
Я не знаю, что я здесь отсутствует. Я просто не мог найти, что может быть решением.
Любая помощь/руководство ценится ..
Спасибо!
Вы не выполнили INotifyPropertyChanged в BaselineEntity. –