[英]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
值運行。
如果視圖的DataContext
是MyClass
並且綁定是直接這樣的到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.