【发布时间】:2015-09-08 20:45:47
【问题描述】:
我有一个 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
我正在使用 VS 2013 和最新可用的 MVVM Light Toolkit。
【问题讨论】:
-
当 IsSelected 从 ViewModel 更改时,您是否会引发属性更改事件?
-
如果我没记错的话,RaisePropertyChanged("SearchResult") 行不应该这样做吗? IsSelected 是 SearchResult 成员的属性。
-
在 IsSelected 集合中你应该有 RaisePropertyChanged("IsSelected")
-
不工作,很遗憾。
-
我尝试将其他列更新为任意值,效果很好。我不明白。