[英]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.