0

次のようなプロパティがあります。

private int _wertungvalue;
public int WertungValue
{
    get { return _wertungvalue; }
    set
    {
        _wertungvalue = value;
        RaisePropertyChanged(() => WertungValue);
    }
}

TextBoxにバインドされています

<TextBox Text="{Binding WertungValue, Mode=TwoWay}"/>

したがって、ユーザーは好きなものを入力できます (数値のテキストボックスは必要ありません!)。ユーザーが「5」と入力すると、WertungValue の値は 5 です。ユーザーが「Test」と入力すると、赤い境界線がポップアップ表示され、WertungValue の値は 5 のままです。

今、私はRelayCommandも持っています

RelayCommand(DeleteExecute,CanDelete);

CanDelete では、プロパティが int かどうかを確認します

private bool CanDelete()
{
    int ot = 0;

    if (int.TryParse(WertungValue.ToString(),out ot) == false)
        return false;
    else
        return true;
}

値が整数の場合にのみ RelayCommand が機能するようにします。つまり、ユーザーが「Test」と入力すると、RelayCommand は false を返す必要があります。プロパティの値は常に整数ですが、ビューでは文字列であるため、問題は決して false を返さないことです。

プロパティを文字列型にしたり、TextBox で UpdateSourceTrigger=PropertyChanged を使用したりしたくありません。また、数値のみの TextBox も作成したくありません... ユーザーは好きなものを入力できるようにする必要がありますが、RelayCommand は整数を入力した場合にのみ機能する必要があります。

4

1 に答える 1

1

これは int プロパティでは不可能だと思います。Binding がプロパティを更新すると、値を整数に変換しようとするため、ユーザーが「Test」を入力すると例外が発生するため、値は更新されず、5 のままです。

2 つのプロパティが必要だと思います。1 つは string 型、もう 1 つは int 型 (または int ?) です。テキストボックスは文字列プロパティにバインドされており、セッターで値を解析できるかどうかを確認し、それに応じて int プロパティを更新できます。

于 2013-06-12T12:23:22.583 に答える