2

DataGrid のテキストボックスに無効なデータが含まれていて無効になっている場合、WPF のバグに遭遇したと思います。

テキストボックスに無効なデータが含まれていて無効になっている場合、無効なデータを含むテキストボックスを2回クリックし、行の別の要素をクリックしてから、無効なデータを含むテキストボックスを2回クリックすることで、魔法のようにデータ(およびバインディング?)を消すことができます。問題を再現する小さな例を作成しました。121 を 2 回、55 を 1 回、121 を 2 回クリックすると、121 が消えます (バインドが機能しなくなりますか?)。誰かがそれがバグであることを確認できますか、それとも私は愚かなことをしていますか?

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# コード:

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));
            }
        }
    }
}
4

0 に答える 0