0

我有一个对话框,显示 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)
            {...
4

1 回答 1

2

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

我认为您要么需要:

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

或者

于 2011-06-23T20:46:10.523 回答