带有条件表达式的WPF DataBinding

时间:2013-08-30 22:06:09

标签: wpf data-binding mvvm

我正在使用MVVM模式,我的视图的datacontext有一个属性Customer。现在我想根据Customer.CustomerID属性的值绑定我的文本框的IsEnabled属性。如果它大于0则应该启用else disable。

我知道我可以在视图模型中轻松添加bool属性并将其绑定到我的文本框的IsEnabled属性,但这似乎是一种矫枉过正。

1 个答案:

答案 0 :(得分:10)

有几种选择。

首先,您可以使用DataTrigger

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="IsEnabled" Value="True"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Customer.CustomerID}" Value="0" >
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
<TextBox>

请注意,来自DataTrigger的setter的值只能覆盖样式设置器中设置的值。如果直接设置该值,则触发器将不起作用 原因是Dependency Property Value Precedence

DataTrigger仅适用于相等条件,因此如果您需要检查负数,那么请使用第二个选项 - Value Converter