0

私はそのようなテキストボックス宣言を持っています:

<TextBox x:Name="InputTextBox">
                <Binding Path="Input" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <MyValidationRule
                        ErrorMessage="Invalid" />
                    </Binding.ValidationRules>
                </Binding>
                <TextBox.InputBindings>
                    <KeyBinding Key="Enter" Command="{Binding Path=AddCommand}"/>
                </InputBindings> 
  </TextBox>

このような validationRule 階層:

public abstract class AbstractValidationRule : ValidationRule
{
    public string ErrorMessage { get; set; }

    protected abstract bool IsValid(string inputString)

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        string inputString = (value ?? string.Empty).ToString();

        if (!IsValid(inputString)) return new ValidationResult(false, ErrorMessage);
        return new ValidationResult(true, null);
    }
}

class MyValidationRule : AbstractStringValidationRule
{
    protected override bool IsValid(string inputString)
    {
        return !String.IsNotNullOrEmpty(inputString);
    }
}

コマンドを追加:

    public ICommand AddCommand
    {
        get
        {
            return m_AddCommand ??
                   (m_AddCommand = new DelegateCommand(Add));
        }
    }

private void Add()
    {
        InternalValue = Input;
        // input = Old invalid value
        OnPropertyChanged("Input")
    }

入力プロパティ:

  public string Input
    {
        get { return m_Input; }
        set
        {
            if (m_Input != value)
            {
                m_Input = value;
                OnPropertyChanged("Input");
            }
        }
    }

「有効」を入力してから「無効」を入力すると、コマンド実行時にプロパティ入力が「有効」の値の状態に設定されます。UpdateSourceTrigger="Explicit" と TextChanged イベントを使用して別の方法を試しましたが、同じ結果でした。

ValidationRule なし - すべて正常に動作します。

PSモデルレイヤーからクラスを変更できません。

4

2 に答える 2

0

検証/ビューモデルと「UI」を同期させたい場合は、IDataErrorInfo を使用する必要があります。入力プロパティは、「有効」および「無効」の値を保持する必要があります。

于 2012-07-31T07:02:20.507 に答える
0

こんにちは set UpdateSourceTrigger="PropertyChanged".これがお役に立てば幸いです。

于 2012-07-31T02:43:28.430 に答える