在WPF数据绑定中使用和等组合布尔值

时间:2014-06-11 04:53:14

标签: c# wpf data-binding

我想知道是否有人建议在WPF数据绑定中使用AND,OR等组合多个布尔值。理想情况下,这应该符合MVVM。

例如:

<TextBox Style="{StaticResource DataEntryField-Medium}"
         Text="{Binding FirstName}"
         IsEnabled="{Binding IsCustomerSelected AND IsEditingEnabled}" />

我想要一个文本框,只有在选择了客户并启用了编辑后才会启用该文本​​框。

2 个答案:

答案 0 :(得分:2)

“绑定IsCustomerSelected AND IsEditingEnabled}”这在XAML中是不可能的。 我们可以通过使用Multibinding和MultivalueConvertors来实现这一点。

有关MultiBinding的更多信息,请查看WPF Tutorial - Using MultiBindings

  

[Multibinding]使您可以绑定到多个项目并使用转换器返回单个新值。如果接口中的控件需要受到许多后端属性更改的影响,这非常有用。

答案 1 :(得分:1)

您还可以选择在ViewModel中创建复合属性,如下所示:

public bool CanEditCustomer
{
     get { return IsCustomerSelected && IsEditingEnabled; }
}

并且在该属性的setter中,您应该为该复合属性引发PropertyChanged事件:

public bool IsCustomerSelected
{
    ....
    set
    {
        if (value != _isCustomerSelected)
        {
            _isCustomerSelected = value;
            RaisePropertyChaged("IsCustomerSelected");
            RaisePropertyChaged("CanEditCustomer");
        }
    }
}

最后是xaml:

<TextBox Style="{StaticResource DataEntryField-Medium}"
         Text="{Binding FirstName}"
         IsEnabled="{Binding CanEditCustomer}" />

这样您就不需要转换器了,但是当您需要时,您必须关注在ViewModel中引发PropertyChanged通知。