1

検証で楽しみを広げるために、小さなユーザー コントロールを作成しました。問題は、検証が機能しないことです。IDataErrorInfo.this[] が呼び出されることはありません。

よろしくお願いいたします。ステファン

これが私のコードです:

<UserControl x:Class="WpfApplication5.TextBoxWithValidation"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         x:Name="TextBoxWithValidationControl">
<Grid>
    <StackPanel Orientation="Horizontal">
        <TextBox Height="23" Width="120"
                 Text="{Binding Path=Text,ElementName=TextBoxWithValidationControl, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}">
        </TextBox>
    </StackPanel>
</Grid>

コードビハインドは次のとおりです。

public partial class TextBoxWithValidation
{
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text",
                                                                                         typeof (object),
                                                                                         typeof (
                                                                                                 TextBoxWithValidation
                                                                                                 ),
                                                                                         new FrameworkPropertyMetadata
                                                                                                 (default(object),
                                                                                                  FrameworkPropertyMetadataOptions
                                                                                                          .BindsTwoWayByDefault));

    public TextBoxWithValidation()
    {
        InitializeComponent();
    }

    public object Text
    {
        get { return GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
}

今、私はこのユーザーコントロールを次のように使用しています:

<local:TextBoxWithValidation Text="{Binding Path=Dummy.MyProperty}" />

そして、私のダミー エンティティは次のように定義されます。

public class Dummy : INotifyPropertyChanged, IDataErrorInfo
{
    private string _myProperty;

    public string MyProperty
    {
        get { return _myProperty; }
        set
        {
            _myProperty = value;
            OnPropertyChanged("MyProperty");
        }
    }

    #region IDataErrorInfo Members

    public string this[string columnName]
    {
        get { return "This is an error"; }
    }

    public string Error { get; private set; }

    #endregion

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
4

0 に答える 0