次の行を見てください
<TextBox Text="{Binding Price}"/>
上からのこのPriceプロパティはDecimal?
(Nullable decimal)です。
ユーザーがテキストボックスのコンテンツを削除した場合(つまり、空の文字列を入力した場合)、ソースを自動的にnull(VBではNothing)に更新する必要があります。
「Xamly」を使用する方法についてのアイデアはありますか?
次の行を見てください
<TextBox Text="{Binding Price}"/>
上からのこのPriceプロパティはDecimal?
(Nullable decimal)です。
ユーザーがテキストボックスのコンテンツを削除した場合(つまり、空の文字列を入力した場合)、ソースを自動的にnull(VBではNothing)に更新する必要があります。
「Xamly」を使用する方法についてのアイデアはありますか?
回答:
私は.NET 3.5 SP1を使用しているので、非常に簡単です。
<TextBox Text="{Binding Price, TargetNullValue=''}"/>
これは(Gregorのコメントに感謝)を意味します。
<TextBox Text="{Binding Price, TargetNullValue={x:Static sys:String.Empty}}"/>
sys
以下のためのインポートXML名前空間であるSystem
内はmscorlib
:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
お役に立てば幸いです。
Target
なくを更新することを目的としていますがSource
、この解決策はまだ何らかの理由でトリックを実行します(理由を完全に理解できませんでした)。
この値コンバーターはトリックを行う必要があります:
public class StringToNullableDecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
decimal? d = (decimal?)value;
if (d.HasValue)
return d.Value.ToString(culture);
else
return String.Empty;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
string s = (string)value;
if (String.IsNullOrEmpty(s))
return null;
else
return (decimal?)decimal.Parse(s, culture);
}
}
リソースでこのコンバーターのインスタンスを宣言します。
<Window.Resources>
<local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/>
</Window.Resources>
そしてあなたのバインディングでそれを使用してください:
<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/>
ここでTargetNullValue
は適切ではないことに注意してください。これはsource
、バインディングのがnullの場合に使用する値を定義するために使用されます。Price
これはソースではなく、ソースのプロパティです...
ValueConverter(IValueConverter)を使用して試すことができます http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
ここの私の頭の後ろのようなもの:
public class DoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return (double)value;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
var doubleValue = Convert.ToDouble(value);
return (doubleValue == 0 ? null : doubleValue);
}
}
(多少の調整が必要になる場合があります)