C# 更新依赖项属性时未命中视图模型属性设置器
我有一个具有依赖项属性的用户控件:C# 更新依赖项属性时未命中视图模型属性设置器,c#,wpf,xaml,C#,Wpf,Xaml,我有一个具有依赖项属性的用户控件: public ObservableCollection<Exclusion> SelectedExclusions { get { return (ObservableCollection<Exclusion>)GetValue(SelectedExclusionsProperty); } set { SetValue(SelectedExclusionsPrope
public ObservableCollection<Exclusion> SelectedExclusions
{
get
{
return (ObservableCollection<Exclusion>)GetValue(SelectedExclusionsProperty);
}
set
{
SetValue(SelectedExclusionsProperty, value);
}
}
public static readonly DependencyProperty SelectedExclusionsProperty =
DependencyProperty.Register(nameof(TimeSeriesChart.SelectedExclusions),
typeof(ObservableCollection<Exclusion>),
typeof(TimeSeriesChart),
new PropertyMetadata(default(ObservableCollection<Exclusion>)));
在视图模型中,我有一个属性&backing变量:
private ObservableCollection<TimeSeriesLibraryInterop.Exclusion> selectedExclusionsToDelete = new ObservableCollection<TimeSeriesLibraryInterop.Exclusion>();
public ObservableCollection<TimeSeriesLibraryInterop.Exclusion> SelectedExclusionsToDelete
{
get
{
return this.selectedExclusionsToDelete;
}
set
{
this.selectedExclusionsToDelete = value;
this.RaisePropertyChanged();
}
}
最后,视图中的绑定:
<userControl1 SelectedExclusions="{Binding SelectedExclusionsToDelete, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
依赖项属性集合已初始化并填充,但是当依赖项属性集合更改时,视图模型属性设置器从未被命中。输出窗口中没有绑定错误。这里有我遗漏的东西吗?看起来您是在向集合中添加项目,而不是替换集合。这样就不会命中vm集合属性的setter 如果希望viewmodel响应添加到SelectedExclusionsToDelete集合的项目,viewmodel将需要处理SelectedExclusionsToDelete.CollectionChanged事件。正确处理该事件删除、添加、移动、清除等确实是一件麻烦事,但如果它不是一个庞大的集合,您通常可以快速而肮脏地处理它:将任何更改视为一个全新的集合。我想你也正是这样
或者,对于更快更脏的方法,我认为您可以在默认情况下将其设置为双向绑定,并让控件为其分配一个新的ObservableCollection。OnKeyDown中的SelectedExclusions。绑定将把它传递回viewmodel并点击setter 看起来您正在向集合中添加项目,而不是替换集合。这样就不会命中vm集合属性的setter。如果要侦听集合的更改,则需要在viewmodel中处理SelectedExclusionsToDelete.CollectionChanged事件。或者,我认为您可以将其设置为双向绑定,并为其分配一个新的ObservableCollection。OnKeyDown上的SelectedExclusions。“那会击中二传手的。”埃德·普朗克特,谢谢。是的,只是需要在添加……酷,我会把它写进答案中。
<userControl1 SelectedExclusions="{Binding SelectedExclusionsToDelete, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>