我有一个带有 ListView
的 MVVM 应用程序由 EditableTextblock
组成在 DataTemplate
中(like this)。
这是我的模型:
public class MyModel
{
private string _data;
public string Data
{
get { return _data; }
set { _data = value; }
}
}
我的 View 模型暴露了
ObservableCollection
的 MyModel
: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/