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

时间:2019-02-21 00:05:26

标签: uwp uwp-xaml

我试图将一个按钮的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中做到这一点?

2 个答案:

答案 0 :(得分:1)

您不应将可为空的值绑定到bool,因为bool不为空。

IsEnabled值为bool,IsChecked值为bool?。您应该编写将bool?转换为bool的转换。

答案 1 :(得分:1)

像这样在XAML中使用它:

   override func viewDidLayoutSubviews() {
      var questionView = QuestionView(frame: CGRect(x: 0, y: self.view.frame.height/2, width: self.view.frame.width, height: 400))
self.view.addSubView(questionView)
}

使用这样的转换器:

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

在页面StaticResources中声明您的转换器:

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();
    }
}
相关问题