【发布时间】:2019-12-12 21:21:04
【问题描述】:
我有这门课:
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 的值运行。
如果视图的DataContext 是MyClass 并且绑定直接到Accepted 属性,如下所示:{Binding Accpected, ...,并且Accepted 属性返回null 转换器运行。
这与绑定链MyClass.Accepted 有何不同?是否有任何解决此问题的方法?
在C# 中是否存在用于 xaml 的空条件运算符?这样做会很好{Binding MyClass?.Accepted, ...。
【问题讨论】:
-
在这种情况下
Fill="{Binding MyClass.Accepted, Converter={StaticResource RedColorWhenNullConverter}}"它会抛出 NRE,使用FallbackValue或TargetNullValue是有意义的
标签: c# wpf xaml binding converters