从其他类引发属性更改事件
本文关键字:事件 属性 其他 | 更新日期: 2023-09-27 17:50:14
在我的项目中,我想在用户控件上显示一个列表。为此,我有一个CategoryView用户控件和一个listview控件,我想在其中显示列表。还有CategoryViewModel。在ViewModel上,我有一个列表属性,我也在其中引发属性更改事件。
public class CategoryViewModel : NotificationObject
{
private List<string> categoryList;
public List<string> CategoryList
{
get
{
return this.categoryList;
}
set
{
this.categoryList = value;
this.RaisePropertyChanged("CategoryList");
}
}
}
这个List被绑定到视图中的listview -元素。
如果我在CategoryViewModel中更改List,它会正常工作,并引发属性更改事件。如果我改变列表从MainWindowViewModel。不会引发属性更改事件,也不会更新视图。我要怎么做呢?
在MainWindowViewModel上我改变了CategoryList。列表将被正确填写。
CategoryViewModel categoryViewModel = new CategoryViewModel();
categoryViewModel.CategoryList = logger.ReadLogfile(this.logFileName).ToList();
你似乎有点糊涂了。在CategoryView UserControl
中有一个ListView
。它的ItemsSource
属性只能将数据绑定到一个集合上,所以很明显,当改变主视图模型和 CategoryViewModel
中的集合时,只有一个会影响ListView
。
从您的代码中似乎可以看出,CategoryViewModel
被设置为UserControl
的DataContext
,因此主视图模型中的集合将不会连接到ListView
。如果您希望将数据从ListView
绑定到主视图模型中的集合,那么您需要使用RelativeSource Binding
来代替:
<ListView ItemsSource="{Binding SomeCollection, RelativeSource={RelativeSource
AncestorType={x:Type YourPrefix:YourParentType}}}" ... />
即便如此,现在CategoryViewModel
中的集合将不再连接,所以您最好决定在这里要做什么。