programing

WPF 바인딩에서 값을 null로 설정합니다.

showcode 2023. 5. 5. 10:03
반응형

WPF 바인딩에서 값을 null로 설정합니다.

다음 줄을 봐주세요.

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

위의 이 가격 속성은 다음과 같습니다.Decimal?(10진수는 무효).

사용자가 텍스트 상자의 내용을 삭제하면(즉, 빈 문자열을 입력하면) 데이터 소스(바인딩 대상)를 null(VB에는 없음)로 자동 업데이트해야 합니다.

XAML에서 어떻게 할 수 있는지에 대한 아이디어가 있습니까?

사용하고 있습니다.NET 3.5 SP1은 매우 간단합니다.

<TextBox Text="{Binding Price, TargetNullValue=''}"/>

이는 다음을 나타냅니다(Gregor의 의견에 감사드립니다).

<TextBox Text="{Binding Price, TargetNullValue={x:Static sys:String.Empty}}"/>

sys에 대해 가져온 xml 네임스페이스입니다.Systemmscorlib:

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

반응형