从其他类引发属性更改事件

本文关键字:事件 属性 其他 | 更新日期: 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被设置为UserControlDataContext,因此主视图模型中的集合将不会连接到ListView。如果您希望将数据从ListView绑定到主视图模型中的集合,那么您需要使用RelativeSource Binding来代替:

<ListView ItemsSource="{Binding SomeCollection, RelativeSource={RelativeSource 
    AncestorType={x:Type YourPrefix:YourParentType}}}" ... />

即便如此,现在CategoryViewModel中的集合将不再连接,所以您最好决定在这里要做什么。