如何让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)
            {...

如何让ObservableCollection使用IDataError

我认为您的方法不起作用,因为为了ValidatesDataError属性起作用,绑定的目标必须实现IDataErrorInfo。在您的场景中,ChannelNumber属性是目标,而不是ChannelNumberCollection本身,并且您的代码片段指示该集合实现IDataErrorInfo。

我认为你要么需要:

  • 确保ChannelNumberCollection中的每个项目都实现IDataErrorInfo(我的建议)

  • 创建可添加到绑定的ValidationRule。ChannelNumber绑定的Validation Rules属性