繁体   English   中英

ViewModel如何告诉我自定义控件在我的属性中的更改?

[英]How can ViewModel tell my custom control change in my property?

我有一个自定义控件调用“ MyControl”。 它具有IList属性“ ControlLists”。 然后将viewModel'MyViewModel'绑定到该自定义控件。 并且“ MyViewModel”具有绑定到ControlList的ViewModelLists。

像这样:

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

我的问题是,如果My ViewModel对其ViewModelLists进行更改(添加/删除),它如何告诉'MyControl'刷新其'ControlList'?

在MyViewModel中,我有

 public override IList<Items> ViewModelLists {
      return myList;// myList is ObserverableCollection<Items>
 }

在MyControl中,我有

 public IList<Items> ControlLists
        {
            get
            {
             ...
             }
             set
             {
              ...
              }
           }

我的问题是,当我在MyControl的设置中设置断点时,为什么该值始终为null? 我希望它是我绑定到的ViewModel中的ObserverableCollection。

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

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

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

但是,我相信如果直接设置绑定的collection属性,即通过将collection的值直接设置为项目的collection来初始化collection,则可以忽略此设置,例如:

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

TheThings = new ObservableCollection<Things>(listOfthings);

在这种情况下,您希望将集合属性从具有自动值的自动属性更改为完整属性,以便您可以在值更改时提高notifypropertychanged,例如

        private ObservableCollection<Things> theThings= new ObservableCollection<Things>();
    public ObservableCollection<Things> TheThings
    {
        get { return this.theThings; }
        set
        {
            this.theThings= value;
            RaisePropertyChanged(); // <-- something like this
        }
    }

我希望这是有帮助的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM