IT박스

WPF 바인딩에서 값을 null로 설정

itboxs 2020. 7. 23. 19:40
반응형

WPF 바인딩에서 값을 null로 설정


다음 줄을보십시오

<TextBox Text="{Binding Price}"/>

위에서이 Price 속성은 Decimal?(Nullable decimal)입니다.

사용자가 텍스트 상자의 내용을 삭제하면 (예 : 빈 문자열을 입력하면) 자동으로 null을 사용하여 소스를 업데이트해야합니다 (VB의 아무것도 없음).

내가 '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"

도움이 되었기를 바랍니다.


이 값 변환기는 트릭을 수행해야합니다.

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);
    }
}

(그러나 약간의 조정이 필요할 수 있습니다)

참고 URL : https://stackoverflow.com/questions/1895453/set-value-to-null-in-wpf-binding

반응형