[英]View model Property setter not hit when dependency property updated
我有一个具有依赖项属性的用户控件:
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>)));
我在按下按键时为此集合添加了选定的排除项:
protected override void OnKeyDown(KeyEventArgs e)
{
if(e.Key == Key.Delete)
{
this.SelectedExclusions.Add(this.ExclusionProviders[0].Exclusions[this.hitTestInfo.DataSeriesIndex]);
}
}
在视图模型中,我具有此属性和支持变量:
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 collection属性的设置器。
如果要让视图模型响应添加到SelectedExclusionsToDelete
集合中的项,则视图模型将需要处理SelectedExclusionsToDelete.CollectionChanged
事件。 “正确地”处理该事件(删除,添加,移动,清除等)确实很麻烦,但是如果它不是一个庞大的集合,则通常可以快速而又轻松地摆脱某些东西:将所有更改视为一个全新的集合。 我认为您也确实如此。
另外,对于更快,更脏的方法,我认为默认情况下可以将其设置为双向绑定,并让控件为OnKeyDown
this.SelectedExclusions
分配一个新的ObservableCollection
。 绑定会将其传递回ViewModel并点击设置器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.