Я пытаюсь создать DataGrid со столбцом флажков.В заголовке этого столбца CheckBox я хотел бы иметь флажок типа "проверить / снять все".
Приложение использует WPF, .NET 4 и MVVM Light.
Воткод:
XAML:
<DataGrid x:Name="dgReportList" ItemsSource="{Binding Path=ReportListItems}">
<DataGrid.Columns>
<DataGridTextColumn Header="*SomeText" Binding="{Binding Path=SourceReport.Name}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox IsChecked="{Binding Source={StaticResource Locator},
Path=MainWindowViewModel.CheckAll, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
ViewModel:
private ObservableCollection<ReportListItemModel> _reportListItems;
public ObservableCollection<ReportListItemModel> ReportListItems
{
get
{
return this._reportListItems;
}
private set
{
this._reportListItems = value;
this.RaisePropertyChanged("ReportListItems");
}
}
....
public bool CheckAll
{
get { return this._checkall; }
set
{
this._checkall = value;
foreach (var reportListItemModel in ReportListItems)
{
reportListItemModel.IsSelected = this._checkall;
}
}
}
Модель:
public class ReportListItemModel
{
public EnvironmentConfigurationModel TargetConfigurationModel { get; set; }
public ReportModel TargetReport { get; set; }
public EnvironmentConfigurationModel SourceConfigurationModel { get; set; }
public ReportModel SourceReport { get; set; }
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
}
}
}
Моя идея состоит в том, чтобы связать DataGrid с коллекцией ObservableColpe типа ReportListItemModel.ReportListItemModel содержит публичное логическое свойство «IsSelected», которое я хочу привязать к флажку.
Сценарий:
Как пользователь, я хочу иметь возможностьвыберите (или отмените выбор) все строки, установив флажок, расположенный в строке заголовка.
Тесты:
Задача: нажмите «Заголовок-флажок», когдаего состояние не проверено.
Ожидается: все флажки в отдельных строках отмечены.
Фактически: проверяется только флажок в строке заголовка.
Задача: когда флажок установлен, щелкните «Заголовок-флажок».проверено состояние.
Ожидается: все флажки в отдельных строках не отмечены.
Фактически: снимается только флажок в строке заголовка.
И флажок «выбрать все», и флажки в строках приводят к тому, что свойство в модели устанавливается в соответствии с ожиданиями.Это просто не связано с видом.У меня есть жуткое ощущение, что моя модель и модель представления каким-то образом смешны, хотя DataGridTextColumn действительно получает значение от модели a-ok.
Я рад предоставить любой дополнительный требуемый код или информацию!
NB. Я только начинаю с WPF, MVVM и т. Д., Поэтому, если здесь есть какой-то фундаментальный недостаток, я буду рад услышать об этом.
Редактировать:
Отредактированодля удобства чтения ...