如何让ObservableCollection与IDataError一起使用

时间:2011-06-23 20:22:36

标签: c# wpf observablecollection idataerrorinfo

我有一个对话框,显示ObservableCollection(集合o int)的各个元素。当用户更改集合的各个值时,我想验证更改。

在我的虚拟机中,集合只有一个属性,我的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}" />

这是我的VM背后的一些代码。 grp_对象是Model

    /// <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)
            {...

1 个答案:

答案 0 :(得分:2)

我不认为您的方法会起作用,因为为了使ValidatesOnDataError属性起作用,Binding的目标必须实现IDataErrorInfo。在您的场景中,ChannelNumber属性是目标,而不是ChannelNumberCollection本身,您的代码片段表明该集合实现了IDataErrorInfo。

我认为您需要:

  • 确保ChannelNumberCollection中的每个项都实现了IDataErrorInfo(我的推荐)