C# WPF DataGridCheckBoxColumn';s州没有';无法从ViewModel获取更新
我有一个DataGrid(ItemsSource是一个ObservableCollection),其DataGridCheckBoxColumn定义如下:C# WPF DataGridCheckBoxColumn';s州没有';无法从ViewModel获取更新,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有一个DataGrid(ItemsSource是一个ObservableCollection),其DataGridCheckBoxColumn定义如下: <DataGrid AutoGenerateColumns="False" SelectionUnit="FullRow" CanUserAddRows="False" CanUserResizeColumns="False" CanUserResize
<DataGrid AutoGenerateColumns="False"
SelectionUnit="FullRow"
CanUserAddRows="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
IsReadOnly="True"
SelectionMode="Single"
ItemsSource="{Binding SearchResult, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<!--additional columns-->
<DataGridCheckBoxColumn Header="Add"
IsReadOnly="False"
Binding="{Binding Path=IsSelected, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
</DataGrid>
绑定在一个方向上工作正常,ViewModel可以看到集合中的更改,但在另一个方向上不起作用。当然,我可以在更新集合后重新初始化集合,但这会打乱排序顺序
List<int> Ids = new List<int>();
foreach (var result in SearchResult) // binding source, of type ObservableCollection
{
if (result.IsSelected)
{
Ids.Add(result.Id);
result.IsSelected = false; // should uncheck the corresponding DataGridCheckBoxColumn cell
}
}
//SearchResult = new ObservableCollection<SearchSeries>(SearchResult); // does the job but rearranges the sorting
//RaisePropertyChanged("SearchResult"); // doesn't work either
List id=new List();
foreach(SearchResult中的var result)//绑定源,类型为ObservableCollection
{
如果(结果被选中)
{
添加(result.Id);
result.IsSelected=false;//应取消选中相应的DataGridCheckBoxColumn单元格
}
}
//SearchResult=新的ObservableCollection(SearchResult);//完成作业,但重新安排排序
//RaisePropertyChanged(“SearchResult”);//也不行
我使用的是VS 2013和最新可用的MVVM Light Toolkit。首先
DataGridCheckBoxColumn
应该放在DataGrid中。Columns
如下:
<DataGrid >
<DataGrid.Columns>
<DataGridCheckBoxColumn />
</DataGrid.Columns>
</DataGrid>
第二个SearchSeries
应该实现INotifyPropertyChanged
希望能帮助您。解决方案是按照@Glen Thomas的建议,在IsSelected的setter中调用RaisePropertyChanged()。我已经有几天没有问这个问题了,同时也没有做我的项目。 它是ObservableCollection类型中唯一没有调用上述方法的成员,导致DataGrid无法“刷新”自身。
IsSelected属性实际上位于分部类中,该分部类扩展了添加web服务引用(reference.cs文件)时生成的类。所有其他属性的设置程序都调用RaisePropertyChanged()
当IsSelected从ViewModel更改时,您是否正在引发property changed事件?如果我没有弄错的话,RaiseProperty changed(“SearchResult”)行不应该这样做吗?IsSelected是SearchResult成员的属性。不幸的是,在IsSelected的集合中,您应该有RaisePropertyChanged(“IsSelected”)不起作用。我尝试过将其他列更新为任意值,但效果很好。我不明白。
namespace Example.Client.ExampleService
{
public partial class Search // the rest of the definition is in Reference.cs
{
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
RaisePropertyChanged("IsSelected");
}
}
}
}