WPF - 如果视图模型中的属性为null,则使用样式中的默认值

时间:2014-05-15 14:45:55

标签: wpf mvvm

我有自己的自定义控件,其依赖属性名为Maximum(double),我为此自定义控件定义了自己的样式。在自定义控件样式中设置为Maximum(50)。在应用程序中,我有一个视图模型,其属性为Maximum(double?)。

<Style x:Key="MyCustomControlDefaultStyle" TargetType="controls:MyControl">
    <Setter Property="Maximum" Value="50" />

</Style>
<controls:MyControl Maximum="{Binding Maximum}" 
                                Style="{StaticResource MyCustomControlDefaultStyle}" 
                                       />

如果视图模型中的最大值为null,我想wpf自动使用MyCustomControlDefaultStyle中定义的默认值。可能吗? 感谢您的建议

2 个答案:

答案 0 :(得分:2)

现在无法检查,但是你可以将DefaultValue放在一个静态属性中,然后从样式和具体Binding中的Fallbackvalue / TargetNullValue引用这个值,如:

<Setter Property="Maximum" Value="{x:Static ns:MyStaticClass.MyStaticProp}" />

在Binding中如:

<controls:MyControl Maximum="{Binding Maximum, FallBackValue={x:Static ns:MyStaticClass.MyStaticProp}" 
                                Style="{StaticResource MyCustomControlDefaultStyle}"  />

不确定它是否适用于FallBackValue。我稍后会检查......:)

答案 1 :(得分:0)

您可以在自己的风格中使用DataTrigger以及Converter

<Style.Triggers>
    <DataTrigger Binding="{Binding Maximum, Converter={StaticResource NullToBooleanConverter}}" Value="False">
        <Setter Property="Text" Value="{Binding Maximum}" />
    </DataTrigger>
</Style.Triggers>

转换器可能如下所示:

class NullToBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value == null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

编辑:无法管理语法高亮显示...