带有条件表达式的WPF DataBinding

Meg*_*ind 3 data-binding wpf mvvm

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

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

Pav*_*nin 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>
Run Code Online (Sandbox Code Playgroud)

请注意,来自DataTrigger的setter的值只能覆盖样式设置器中设置的值.如果直接设置该值,则触发器将不起作用.
原因是依赖属性值优先.

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