我有以下VM类:
public class SubModuleVM:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string _name;
public string Name
{
get { return_name; }
set {
_name = value;
PropertyChanged?.(this, new PropertyChangedEventArgs(nameof(Name)));
}
}
}
public class ProjectViewVM:INotifyPropertyChanged
{
public ReadOnlyObservableCollection<SubModuleVM> SubModules
{get;set;}
public ProjectViewVM()
{
SubModules=LoadFromDatabase(); //loads from database
}
// snip irrelevant details
}
与ProjectViewVM对应的XAML类:
<ListView ItemsSource="{Binding SubModules}" SelectedItem="{Binding CurrentModule}" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding Name}" Grid.Column="0" Margin="0,0,5,0"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
请注意,Collection是ReadOnlyObservableCollection
,不确定是否会导致绑定问题
当用户更改了用户界面Name
中的ListView
时,我想进行验证,以便SubModuleVM.Name
内的所有ProjectViewVM
都是唯一的。换句话说,我不允许SubModuleVM.Name
集合中的SubModules
重复。如果用户将其重命名为已存在的值,那么我希望激活验证事件(在UI级别)并通知用户这是不允许的,然后该名称将恢复为旧名称。
我认为ListView应该有这样的验证事件可用于捕获,但到目前为止我找不到任何。
如何实施我的要求?
答案 0 :(得分:-1)
如果你在上面提到的列表视图中更新或编辑名称时调用了Name属性上的set,请尝试调用类似于以下代码段的逻辑:
id