ViewModel如何告诉我的自定义控件改变我的属性
本文关键字:我的 改变 属性 自定义控件 ViewModel 何告诉 | 更新日期: 2023-09-27 18:10:58
我有一个自定义控件MyControl。它有一个属性ControlLists它是一个列表。我绑定了一个viewModel MyViewModel到那个我的自定义控件。和'MyViewModel'有一个ViewModelLists绑定到控制列表。
:
<DataTemplate x:Key="MyDataTemplate">
<myapp:MyControl
ControlLists="{Binding ViewModelLists}"
/>
</DataTemplate>
我的问题是,如果我的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 ?
假设绑定到ControlLists的属性是一个ObservableCollection,它会在添加、删除或清除项时自动通知绑定控件。还有一个"CollectionChanged"事件,你可以订阅,如果你需要在项目被添加和从列表中删除时做出反应…
但是,我相信如果您直接设置绑定集合属性,也就是说,您通过将其值直接设置为项的集合来初始化集合,例如:
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
}
}
我希望这是有帮助的!
如果你将ViewModelLists公开为ObservableCollection,那么当列表发生变化时,控件将自动知道。