我有下面的按钮,它的IsEnabled属性绑定到ViewModel中名为EnableBtn的bool。
如果我有另一个名为EnableMail的bool,我如何修改它以便IsEnabled被绑定到两者?
<Button IsEnabled="{Binding EnableBtn, Converter={StaticResource InvertBooleanConverter}}" x:Name="SaveSendButton" Grid.Row="0" Grid.Column="1" Text="{i18n:Translate SaveAndSend}" Style="{StaticResource bottomButtonsBlue}" Command="{Binding EmailPlanCommand}"></Button>
答案 0 :(得分:5)
public bool IsBothEnabled
{
get
{
if (EnableBtn && EnableMail)
return true;
return false;
}
}
现在将Button.IsEnabled属性绑定到IsBothEnabled。
答案 1 :(得分:2)
替代meq的有效解决方案,您可以使用multi binding:
XAML代码如下所示:
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource AreAllTrueMultiValueConverter}">
<Binding Path="EnableBtn" />
<Binding Path="EnableMail" />
</MultiBinding>
</TextBox.IsEnabled>
但是,您需要一个类似于:
的MultiValueConverterpublic class AreAllTrueMultiValueConverter: IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
return values.OfType<bool>().All();
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}
}
我更喜欢将MultiBinding添加到其他视图模型属性,因为它不需要“依赖属性”,如果另一个属性发生更改,则必须通知它。因此,它可以使视图模型逻辑更简单。