【问题标题】:How to get ObservableCollection to work with IDataError如何让 ObservableCollection 与 IDataError 一起工作
【发布时间】:2011-06-23 20:22:36
【问题描述】:

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

在我的 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)
            {...

【问题讨论】:

    标签: c# wpf observablecollection idataerrorinfo


    【解决方案1】:

    我认为您的方法行不通,因为要使 ValidatesOnDataError 属性起作用,Binding 的目标必须实现 IDataErrorInfo。在您的场景中,ChannelNumber 属性是目标,而不是 ChannelNumberCollection 本身,并且您的代码 sn-p 指示该集合实现了 IDataErrorInfo。

    我认为你要么需要:

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

    或

    【讨论】:

      猜你喜欢
      • 2011-04-25
      • 2023-02-02
      • 2017-06-25
      • 2020-12-13
      • 2012-02-02
      • 2011-02-22
      • 2013-03-24
      • 2016-07-22
      • 2011-08-17
      相关资源
      最近更新 更多