gpt4 book ai didi

c# - 如何检查模型列表中的重复条目?

转载 作者:行者123 更新时间:2023-12-03 11:02:55 26 4
gpt4 key购买 nike

我有一个带有 ListView 的 MVVM 应用程序由 EditableTextblock 组成在 DataTemplate 中(like this)。

这是我的模型:

public class MyModel
{
private string _data;
public string Data
{
get { return _data; }
set { _data = value; }
}
}

我的 View 模型暴露了 ObservableCollectionMyModel :
public class MyViewModel
{
[...]
public ObservableCollection<Mymodel> models = new ObservableCollection<MyModel>();
}

并在绑定(bind)到 ListView 的 View 中:
<ListView ItemsSource={Binding models}>
<!-- code removed for more visibility -->
<DataTemplate>
<controls:EditableTextblock Text="{Binding Data, Mode=TwoWay}" />
</DataTemplate>
<!-- ... -->
</ListView>

您是否有任何线索表明,当我在列表中的某个项目中更新数据成员的值时,会检查集合中是否已存在值?

例如,如果我将一个字段更新为“值 1”,它会检查模型集合中是否有一个成员 Data 已经具有该值。

如果它找到一个,它会在成员数据的末尾添加一个“0”。

最佳答案

前提是 MyModel类实现 INotifyPropertyChanged并提出 PropertyChanged Data 时的事件属性已设置,您可以在 View 模型中处理此问题:

public class MyViewModel
{
public ObservableCollection<MyModel> models = new ObservableCollection<MyModel>();

public MyViewModel()
{
models.CollectionChanged += Models_CollectionChanged;
}

private void Models_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (object model in e.NewItems)
{
(model as INotifyPropertyChanged).PropertyChanged
+= new PropertyChangedEventHandler(Model_PropertyChanged);
}
}

if (e.OldItems != null)
{
foreach (object model in e.OldItems)
{
(model as INotifyPropertyChanged).PropertyChanged
-= new PropertyChangedEventHandler(Model_PropertyChanged);
}
}
}

private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
MyModel updatedModel = sender as MyModel;
MyModel duplicate = models.FirstOrDefault(x => x != updatedModel && x.Data == updatedModel.Data);
if(duplicate != null)
{
updatedModel.Data += "0";
}
}
}
public class MyModel : INotifyPropertyChanged
{
private string _data;
public string Data
{
get { return _data; }
set { _data = value; NotifyPropertyChanged(); }
}

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

关于c# - 如何检查模型列表中的重复条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46956227/

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