Привязать IsEnabled кнопки к IsChecked переключателя UWP - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь привязать свойство enabled кнопки к свойству флажка другой кнопки в UWP.

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

Однако я получаю ошибку Неправильное назначение привязки: Невозможно напрямую связать тип 'Система.Nullable (System.Boolean) 'до' System.Boolean '.Используйте привязку приведения, преобразования или функции для изменения типа

Я думаю, я мог бы исправить это, привязав промежуточное значение в ViewModel, но есть ли способ сделать это в XAML?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Используйте его в 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();
    }
}

Объявите свой конвертер на своей странице StaticResources:

<converters:NullBoolConverter
        x:Key="NullBoolConverter"/>
0 голосов
/ 21 февраля 2019

Не следует привязывать значение Nullable к bool, поскольку bool не равно NULL.

Значение IsEnabled равно bool, а значение IsChecked равно bool?.Вы должны написать конвертер для конвертации bool? в bool.

...