C# ViewModel如何告知我的属性中的自定义控件更改?

C# ViewModel如何告知我的属性中的自定义控件更改?,c#,xaml,C#,Xaml,我有一个自定义控件调用“MyControl”。它有一个属性“ControlLists”,即IList。我将viewModel“MyViewModel”绑定到我的自定义控件。“MyViewModel”有一个绑定到控制器的ViewModelList 像这样: <DataTemplate x:Key="MyDataTemplate"> <myapp:MyControl ControlLists="{Binding ViewModelLists}"

我有一个自定义控件调用“MyControl”。它有一个属性“ControlLists”,即IList。我将viewModel“MyViewModel”绑定到我的自定义控件。“MyViewModel”有一个绑定到控制器的ViewModelList

像这样:

 <DataTemplate x:Key="MyDataTemplate">
        <myapp:MyControl
         ControlLists="{Binding ViewModelLists}"
        />
  </DataTemplate>

我的问题是,如果我的ViewModel对其ViewModelList进行了更改(添加/删除),它如何告诉“MyControl”刷新其“ControlList”

在MyViewModel中,我有

 public override IList<Items> ViewModelLists {
      return myList;// myList is ObserverableCollection<Items>
 }
 public IList<Items> ControlLists
        {
            get
            {
             ...
             }
             set
             {
              ...
              }
           }
public覆盖IList视图模型列表{
return myList;//myList是ObserverableCollection
}
在MyControl中,我有

 public override IList<Items> ViewModelLists {
      return myList;// myList is ObserverableCollection<Items>
 }
 public IList<Items> ControlLists
        {
            get
            {
             ...
             }
             set
             {
              ...
              }
           }
公共IList控制器
{
收到
{
...
}
设置
{
...
}
}
我的问题是,当我在MyControl设置中设置断点时,为什么该值总是空的?我希望它是我的ViewModel中绑定到的ObserverableCollection


绑定时是否调用控件属性的setter?

如果将ViewModelList作为ObservableCollection公开,则控件将自动知道列表何时更改。

假设绑定到ControlLists的属性是ObservableCollection,在添加、删除或清除项目时,它将自动通知绑定控件。还有一个“CollectionChanged”事件,您可以订阅,如果您需要对列表中添加和删除的项目做出反应

但是,我认为,如果直接设置绑定集合属性,即通过将集合的值直接设置为项集合来初始化集合,则会忽略这一点,如:

public ObservableCollection<Things> TheThings {get;set;}
publicobservablecollection things{get;set;}

things=新的可观测集合(事物列表);
在这种情况下,您希望将集合属性从autoproperty更改为具有支持值的完整属性,以便在值更改时引发notifypropertychanged,如下所示

        private ObservableCollection<Things> theThings= new ObservableCollection<Things>();
    public ObservableCollection<Things> TheThings
    {
        get { return this.theThings; }
        set
        {
            this.theThings= value;
            RaisePropertyChanged(); // <-- something like this
        }
    }
private observedcollection things=new observedcollection();
公众可观察到的收集信息
{
获取{返回this.theThings;}
设置
{
things=value;

RaisePropertyChanged();//更准确地说,ObservableCollection将引发一个
CollectionChanged
事件。由您的控件来处理它或在可以处理它的控件中使用集合(通常是从ItemsControl继承的)。