如何让ObservableCollection使用IDataError
本文关键字:使用 IDataError ObservableCollection | 更新日期: 2023-09-27 18:00:19
我有一个对话框,显示ObservableCollection(int集合)的各个元素。当用户更改集合的各个值时,我希望验证更改。
在我的VM中,只有集合的一个属性,并且我的XAML绑定到各个元素。
那么,当集合中的项发生更改时,如何调用验证属性索引器呢?
我对WPF还很陌生,所以我认为有一个简单的解决方案。。
谢谢你的帮助。
这是XAML。10个通道中的每个通道都有一个等效的文本框
<TextBox Grid.Row="0" Grid.Column="1" Name="chan01"
HorizontalAlignment="Left" Width="60"
Text="{Binding ChannelList[0].ChannelNumber, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged,
NotifyOnValidationError=True}" />
以下是我的虚拟机中的一些代码。grp_对象是型号
/// <summary>
/// Scan channel list.
/// </summary>
public ChannelNumberCollection ChannelList
{
get
{
return grp_.ChannelList;
}
set
{
grp_.ChannelList = value; NotifyPropertyChanged("ChannelList");
}
}
public string this[string propertyName]
{
get
{
switch (propertyName)
{...
我认为您的方法不起作用,因为为了ValidatesDataError属性起作用,绑定的目标必须实现IDataErrorInfo。在您的场景中,ChannelNumber属性是目标,而不是ChannelNumberCollection本身,并且您的代码片段指示该集合实现IDataErrorInfo。
我认为你要么需要:
- 确保ChannelNumberCollection中的每个项目都实现IDataErrorInfo(我的建议)
或
- 创建可添加到绑定的ValidationRule。ChannelNumber绑定的Validation Rules属性