这个问题已经在这里有了答案:




已关闭8年。






我在WPF中有一个应用程序,但是我想(全部或部分)转换为MVVM。

我创建了一个 View 模型,该模型指向一些要在列表 View 中显示的ObservableCollections(一次可以通过单选按钮更改)。

更改集合后,我会收到通知,但是,当集合中的一项发生更改时(即IsSelected从false/true更改,反之亦然),我不会收到通知。

我能看到的唯一方法是为每个项目订阅notifypropertychanged事件处理程序,并在进行新的选择以删除订阅并订阅另一个集合的事件时使用,但这似乎至少不是这样。最理想的解决方案。

什么解决方案适合此问题?我检查了一些类似的帖子,但似乎有些不同。

最佳答案

ObservableCollection仅监听集合本身中的更改。它不负责监听对集合内项目所做的更改。如果您想要这种行为,则必须自己添加。

通常,我在CollectionChanged事件中添加一些内容,该事件将PropertyChanged事件添加/删除到集合中的项目中。

void MyCollection_CollectionChanged(object sender, CollectionChangedEventArgs e)
{
    if (e.NewItems != null)
    {
        for each (SomeObject item in e.NewItems)
            item.PropertyChanged += SomeObject_PropertyChanged;
    }

    if (e.OldItems != null)
    {
        for each (SomeObject item in e.OldItems)
            item.PropertyChanged -= SomeObject_PropertyChanged;
    }
}

void SomeObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
{

    // Handle event however you want here

    // For example, simply raise property change to refresh collection
    RaisePropertyChanged("MyCollection");

    // Or move item to new collection if it's selected
    if (e.Property == "IsSelected")
    {
        var item = object as SomeItem;
        MyCollectionA.Remove(item);
        MyCollectionB.Add(item);
    }
}

关于c# - ListView的集合中多个IsSelected ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9126909/

10-14 18:12
查看更多