在我的项目中,我想在用户控件上显示List。为此我有一个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");
}
}
}
此列表绑定到视图中的ListView元素。
如果我更改了CategoryViewModel中的List,它可以正常工作并引发属性更改事件。如果我从MainWindowViewModel更改List。没有属性已更改事件已升级且视图将不会更新。我该怎么做?
在MainWindowViewModel上,我更改了CategoryList。列表将正确填写。
CategoryViewModel categoryViewModel = new CategoryViewModel();
categoryViewModel.CategoryList = logger.ReadLogfile(this.logFileName).ToList();
答案 0 :(得分:1)
ListView
中有一个CategoryView UserControl
。它的ItemsSource
属性只能 绑定到一个集合的数据,所以很明显,在主视图模型和 CategoryViewModel
中更改集合时,只有一个会影响ListView
。
从您的代码中可以看出,CategoryViewModel
被设置为DataContext
的{{1}},因此主视图模型中的集合将不会连接到UserControl
}。如果您希望将数据从ListView
绑定到主视图模型中的集合,那么您需要使用ListView
代替:
RelativeSource Binding
即便如此,现在<ListView ItemsSource="{Binding SomeCollection, RelativeSource={RelativeSource
AncestorType={x:Type YourPrefix:YourParentType}}}" ... />
中的收藏品将不再关联,因此您可以更好地确定您想要在此处做什么。