다음 줄을보세요
<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);
}
}
(하지만 약간의 조정이 필요할 수 있습니다)