使用DataGrid和IDataErrorInfo时出现WPF错误?

使用DataGrid和IDataErrorInfo时出现WPF错误?,wpf,datagrid,idataerrorinfo,Wpf,Datagrid,Idataerrorinfo,当DataGrid中的文本框包含无效数据并被禁用时,我想我偶然发现了WPF中的一个bug 当文本框包含无效数据且被禁用时,我可以通过在包含无效数据的文本框上单击两次,单击行中的另一个元素,然后在包含无效数据的文本框上单击两次,使数据(和绑定?)神奇地消失。 我举了一个小例子,再现了这个问题。如果您在121上单击两次,在55上单击一次,然后在121上单击两次,121就会消失(绑定将停止工作?)。有人能确认这是一个bug还是我做了什么蠢事 WPF代码: <Window x:Class="Wpf

当DataGrid中的文本框包含无效数据并被禁用时,我想我偶然发现了WPF中的一个bug

当文本框包含无效数据且被禁用时,我可以通过在包含无效数据的文本框上单击两次,单击行中的另一个元素,然后在包含无效数据的文本框上单击两次,使数据(和绑定?)神奇地消失。 我举了一个小例子,再现了这个问题。如果您在121上单击两次,在55上单击一次,然后在121上单击两次,121就会消失(绑定将停止工作?)。有人能确认这是一个bug还是我做了什么蠢事

WPF代码:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <DataGrid ItemsSource="{Binding Path=Tests}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Test header">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox IsEnabled="False" Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
                        </TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Test header 2">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox IsEnabled="False" Text="{Binding Path=Text2, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
                        </TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

C#代码:

使用系统;
使用System.Windows;
使用系统组件模型;
使用System.Collections.ObjectModel;
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共可观测集合测试{get;set;}
公共主窗口()
{
初始化组件();
this.DataContext=this;
测试=新的可观察集合();
添加(新测试());
}
}
公共类测试:INotifyPropertyChanged,IDataErrorInfo
{
公共字符串文本{get;set;}
公共字符串Text2{get;set;}
公开考试()
{
Text=“121”;
Text2=“55”;
}
公共字符串错误
{
获取{return null;}
}
公共字符串此[string columnName]
{
获取{return“WTF!!!”;}
}
公共事件属性更改事件处理程序属性更改;
私有void NotifyPropertyChanged(字符串信息)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(信息));
}
}
}
}
using System;
using System.Windows;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<Test> Tests {get;set;}

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            Tests = new ObservableCollection<Test>();
            Tests.Add(new Test());
        }
    }

    public class Test : INotifyPropertyChanged, IDataErrorInfo
    {
        public string Text { get; set; }
        public string Text2 { get; set; }
        public Test()
        {
            Text = "121";
            Text2 = "55";
        }

        public string Error
        {
            get { return null; }
        }

        public string this[string columnName]
        {
            get { return "WTF!!!"; }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}