4

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

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

4

1 回答 1

12

有几种选择。

首先,您可以使用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 的设置器中的值只能覆盖样式设置器中设置的值。如果您直接设置该值,则触发器将不起作用。
原因是Dependency Property Value Precedence

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

于 2013-08-30T22:14:36.520 回答