MVVM将IsEnabled绑定到ViewModel中的多个bool

时间:2017-06-05 13:21:31

标签: c# visual-studio mvvm

我有下面的按钮,它的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>

2 个答案:

答案 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>

但是,您需要一个类似于:

的MultiValueConverter
public 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添加到其他视图模型属性,因为它不需要“依赖属性”,如果另一个属性发生更改,则必须通知它。因此,它可以使视图模型逻辑更简单。