gpt4 book ai didi

c# - ListView的集合中多个IsSelected

转载 作者:行者123 更新时间:2023-12-03 10:39:43 24 4
gpt4 key购买 nike

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




已关闭8年。




Possible Duplicate:
ObservableCollection that also monitors changes on the elements in collection



我在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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com