私のユニバーサル アプリでは、テキスト ボックスに値を入力すると、入力した値がバッキング オブジェクトに転送されません。これは、変数を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;
}
}