C# WPF Datagrid-如何在一行中进行更改以影响其他行
我有一个绑定到项对象集合的WPF数据网格。datagrid有一个复选框列。我希望实现它,以便在选中/取消选中任何行的复选框时,选中/取消选中所有其他行。有没有一种好的MVVM方法可以做到这一点 XAMLC# WPF Datagrid-如何在一行中进行更改以影响其他行,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有一个绑定到项对象集合的WPF数据网格。datagrid有一个复选框列。我希望实现它,以便在选中/取消选中任何行的复选框时,选中/取消选中所有其他行。有没有一种好的MVVM方法可以做到这一点 XAML <DataGrid ItemsSource="{Binding Items}"> <DataGrid.Columns> <DataGridCheckBoxColumn Binding="{Binding MyProperty}" />
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding MyProperty}" />
<DataGrid.Columns>
</DataGrid>
C#
公共类DataGridViewModel
{
公共ObservableCollection项{get;set;}
}
公共类项目
{
public bool MyProperty{get;set;}//set all Item.MyProperties(如果设置了任何项)
}
基于:
将其用作数据项:
public class Selectable<T>: ViewModelBase //ViewModelBase should Implement NotifyPropertyChanged.
{
private T _model;
public T Model
{ get { return _model; }
set
{
_model = value;
NotifyPropertyChange("Model");
}
}
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
NotifyPropertyChange("IsSelected");
if (OnIsSelectedChanged != null)
OnIsSelectedChanged(this);
}
}
public Action<Selectable<T>> OnIsSelectedChanged;
}
公共类可选:ViewModelBase//ViewModelBase应实现NotifyPropertyChanged。
{
私有T_模型;
公共T模型
{获取{返回_模型;}
设置
{
_模型=价值;
NotifyPropertyChange(“模型”);
}
}
私立学校当选;
公选学校
{
获取{return}isSelected;}
设置
{
_isSelected=值;
NotifyPropertyChange(“IsSelected”);
if(OnIsSelectedChanged!=null)
OnIsSelectedChanged(此);
}
}
已选定的公共行动已更改;
}
然后将ViewModel更改为如下所示:
public class DataGridViewModel
{
public ObservableCollection<Selectable<Item>> Items { get; set; }
public void SomeMethod()
{
Items = new ObservableCollection<Selectable<Item>>();
//Populate the Collection here!
foreach (var item in Items)
item.OnIsSelectedChanged = OnItemSelectedChanged;
}
private void OnItemSelectedChanged(Selectable<Item> item)
{
if (item.IsSelected)
{
var itemsToDeselect = Items.Where(x => x != item);
foreach (var itemToDeselect in itemsToDeselect)
itemToDeselect.IsSelected = false;
}
}
}
公共类DataGridViewModel
{
公共ObservableCollection项{get;set;}
公共方法()
{
Items=新的ObservableCollection();
//在这里填充集合!
foreach(项目中的var项目)
item.OnIsSelectedChanged=OnIsSelectedChanged;
}
private void OnItems SelectedChanged(可选项)
{
如果(项目.已选定)
{
var itemsToDeselect=Items.Where(x=>x!=item);
foreach(变量itemToDeselect在itemToDeselect中)
itemToDeselect.isselect=false;
}
}
}