簡體   English   中英

依賴項屬性更新時未命中視圖模型屬性設置器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM