我想知道是否有人建议在WPF数据绑定中使用AND,OR等组合多个布尔值。理想情况下,这应该符合MVVM。
例如:
<TextBox Style="{StaticResource DataEntryField-Medium}"
Text="{Binding FirstName}"
IsEnabled="{Binding IsCustomerSelected AND IsEditingEnabled}" />
我想要一个文本框,只有在选择了客户并启用了编辑后才会启用该文本框。
答案 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通知。