提升其他类别的Property Changed事件

时间:2014-03-14 15:58:35

标签: c# wpf mvvm propertychanged

在我的项目中,我想在用户控件上显示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();

1 个答案:

答案 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}}}" ... /> 中的收藏品将不再关联,因此您可以更好地确定您想要在此处做什么。