绑定按钮的IsEnabled到切换按钮UWP的IsChecked

绑定按钮的IsEnabled到切换按钮UWP的IsChecked,uwp,uwp-xaml,Uwp,Uwp Xaml,我试图将按钮的enabled属性绑定到UWP中另一个按钮的checked属性 <CommandBar DefaultLabelPosition="Right" VerticalContentAlignment="Center"> <AppBarButton Icon="Add" Label="Add Images" Command="{x:Bind ViewModel.AddImagesCommand}"/> <

我试图将按钮的enabled属性绑定到UWP中另一个按钮的checked属性

    <CommandBar DefaultLabelPosition="Right" VerticalContentAlignment="Center">
            <AppBarButton Icon="Add" Label="Add Images" Command="{x:Bind ViewModel.AddImagesCommand}"/>
            <AppBarSeparator/>
            <AppBarToggleButton x:Name="buttonSelect" Label="Select"/>
            <AppBarButton Icon="SelectAll" Label="SelectAll" Click="{x:Bind gridViewInputImages.SelectAll}" IsEnabled="{x:Bind buttonSelect.IsChecked}"/>
        </CommandBar>

但是,我得到一个错误:绑定赋值无效:无法直接将类型“System.Nullable(System.Boolean)”绑定到“System.Boolean”。使用强制转换、转换器或函数绑定更改类型


我想我可以通过绑定到ViewModel中的中间值来解决这个问题,但是在XAML中有没有办法做到这一点?

您不应该将可为null的值绑定到bool,因为bool不是null


IsEnabled值为
bool
,IsChecked值为
bool?
。您应该编写一个convert to convert
bool?
to bool。

在XAML中使用它,如下所示:

<CommandBar
            DefaultLabelPosition="Right"
            VerticalContentAlignment="Center">
            <AppBarButton
                Icon="Add"
                Label="Add Images"
                Command="{x:Bind ViewModel.AddImagesCommand}" />
            <AppBarSeparator />
            <AppBarToggleButton
                x:Name="buttonSelect"
                Label="Select" />
            <AppBarButton
                Icon="SelectAll"
                Label="SelectAll"
                Click="{x:Bind gridViewInputImages.SelectAll}"
                IsEnabled="{Binding IsChecked, ElementName=buttonSelect, Converter={StaticResource NullBoolConverter}}" />
        </CommandBar>
public class NullBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return false;

        return (bool)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
在页面资源中声明转换器:

<converters:NullBoolConverter
        x:Key="NullBoolConverter"/>