C# WPF DataGridCheckBoxColumn';s州没有';无法从ViewModel获取更新

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(ItemsSource是一个ObservableCollection),其DataGridCheckBoxColumn定义如下:

<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");
            }
        }
    }
}