繁体   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