簡體   English   中英

屬性路徑為空時,WPF綁定轉換器無法運行

[英]WPF Binding Converter does not run when Property Path is null

我有這個課:

public class MyClass
{
    public bool? Accepted { get; set; } = true;
}

...以及此ViewModel:

public class MyViewModel
{
    public MyClass MyClass => null;
}

...以及此視圖:

<MyControl.Resources>
    <mynamespace:RedColorWhenNullConverter x:Key="RedColorWhenNullConverter" />
</MyControl.Resources>
<Rectangle
    Height="100"
    Width="100"
    Fill="{Binding MyClass.Accepted, Converter={StaticResource RedColorWhenNullConverter}}"
/>

...以及此ValueConverter:

public class RedColorWhenNullConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Green);
    }

    {...}
}

當視圖模型為MyClass屬性返回null時,轉換器將完全不運行。 我期望它以null值運行。

如果視圖的DataContextMyClass並且綁定是直接這樣的到Accepted屬性: {Binding Accpected, ... ,並且Accepted屬性返回null則轉換器運行。

這與綁定鏈MyClass.Accepted什么不同? 有沒有解決此問題的方法?

是否像C#那樣存在xaml的空條件運算符? 做到這一點{Binding MyClass?.Accepted, ...

綁定轉換器應該將綁定的source屬性的值轉換為可分配給target屬性的值。

如果無法評估source屬性的值,則無法調用Converter。

您可以將FallbackValue=Red添加到綁定中,但是仍然不調用Converter。

或者,根本不使用Converter,而是使用具有DataTriggers的Style和Fill屬性的默認值:

<Rectangle Height="100" Width="100">
    <Rectangle.Style>
        <Style TargetType="Rectangle">
            <Setter Property="Fill" Value="Red"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyClass.Accepted}" Value="False">
                    <Setter Property="Fill" Value="Blue"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding MyClass.Accepted}" Value="True">
                    <Setter Property="Fill" Value="Green"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Rectangle.Style>
</Rectangle>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM