我已经看到了其他问题:
ObservableCollection dependency property does not update when item in collection is deleted
MVVM binding to a User Control with an ObservableCollection dependency property
......甚至......
https://go4answers.webhost4life.com/Example/databinding-observable-collection-196835.aspx
但是他们要么做我不做的事情,要么就是我没得到它。
我的问题是DependencyProperty在属性本身发生更改时触发更改(即ObservableCollection获取" newed")但是当集合中的项目发生更改时不会触发更改。
我已经看到的其他解决方案在View中发现了变化,我试图通知ViewModel这一变化。
如何通知ViewModel DependencyProperty集合的更改?
如果您觉得有必要,我可以发布代码示例,但是我所尝试的所有内容都是一团糟。
答案 0 :(得分:1)
通常情况下,您正在描述我使用此解决方案。
为了知道DataGrid
中选择了哪些项目(在MVVM应用程序中),您不需要将ObservableCollection
公开为DependencyProperty。
在DataGridRow
模型中添加属性:
public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected != value)
{
isSelected = value;
OnPropertyChanged("IsSelected"); // if you are implementing INotifyPropertyChanged
}
}
}
关于XAML,您可以在DataGrid中使用Style来绑定IsSelected
属性:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=People}">
<DataGrid.Columns>
<!-- your columns are here -->
</DataGrid.Columns>
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected}" />
</Style>
</DataGrid.ItemContainerStyle>
</DataGrid>
通过这种方式,在ViewModel中,您始终可以在不订阅事件的情况下了解选择了哪些项目,并且可以在MergeMember RelayCommand的CanExecute
方法中编写逻辑。