1

私のユニバーサル アプリでは、テキスト ボックスに値を入力すると、入力した値がバッキング オブジェクトに転送されません。これは、変数をnull不可にするとすぐに、null可能な値に対してのみ発生し、期待どおりに機能します。

私が奇妙だと思ったのは、TargetNullValue = ''をバインディングに設定してテキストボックスをクリアすると、バッキングオブジェクトが呼び出され、期待どおりに値がnullに設定されますが、テキストボックスに新しい値を入力するとその値バッキング オブジェクトには転送されません。

私の問題はこれと非常に似ていると思います: UWP - TextBox.Text を Nullable<int> にバインドする

唯一の違いは、エラー メッセージが表示されず、何も起こらないことです。コンバーターの回避策も試しました。コンバーターが呼び出されますが、コンバーターによって返される値はオブジェクトに設定されません。

上でリンクしたような投稿をたくさん見つけましたが、いずれの場合も何らかのエラー メッセージが返されました。繰り返しますが、私の場合、拘束力がないかのように、何も起こりません。

これは私のコードです:

<Grid.Resources>
    <utils:NullableValueConverter x:Key="NullableIntConverter" />
</Grid.Resources>
<TextBox Text="{Binding Level, Mode=TwoWay, Converter={StaticResource NullableIntConverter}, TargetNullValue=''}" PlaceholderText="Level"/>

バッキング オブジェクト:

public class Unit
{
    public int? Level { get; set; }
}

コンバーター:

public class NullableValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return string.IsNullOrEmpty(value.ToString()) ? null : value;
    }
}
4

1 に答える 1

3

以下のように、ConvertBack() でint値を返すようにしてください。

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        int data;

        if (string.IsNullOrEmpty((string)value) || !int.TryParse((string)value, out data))
        {
            return null;
        }
        else
        {
            return data;
        }
    }
于 2016-04-20T15:56:35.883 に答える