Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新依赖项属性时未命中视图模型属性设置器_C#_Wpf_Xaml - Fatal编程技术网

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}"/>