Видимость кнопки WPF - PullRequest
       1

Видимость кнопки WPF

2 голосов
/ 18 августа 2010

Я использую архитектуру MVVM для разработки приложения WPF ...

Пока все идет хорошо.

Я столкнулся с проблемой с видимостью привязки.Я хочу свести к минимуму написание кода в код позади, если я могу, но если это ТРЕБУЕТСЯ, то я не против этого.

У меня есть ViewModel.Эта модель предоставляет логическое значение и 2 команды.Команда подключения, команда отключения и DeviceCurrentlyConnected Bool.

В основном я решил создать 2 кнопки, но их видимость зависит от логического значения.

Так что мне было тяжело с этим.Я долго пробовал стили с триггерами.

<Button Visibility="Hidden" Content="{x:Static UIStrings:ClientStrings.DeviceBar_DisconnectCommandName}" VerticalAlignment="Center" HorizontalAlignment="Center" Height="{Binding ElementName=this.Content, Path=DesiredHeight}" Margin="10" Name="Disconnect" Command="{Binding DisconnectCurrentDeviceCommand}">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding DataCotext.DeviceConnected, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

Я не могу заставить стили работать вообще.

В основном мне нужны следующие функции:

DeviceConnected = false: отображение кнопки с содержимым Connect и команда, связанная с ConnectCommand.

DeviceConnected = true: отображение кнопкис отключением содержимого и привязкой команды к DisconnectCommand.

для кнопки, отображаемой и привязанной к подключаемому устройству, когда в данный момент не подключено ни одно устройство, и для кнопки, отображаемой, когда подключено устройство, привязанноекоманда разъединения и сказать слово разъединить.

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Запишите конвертер bool to visibility и затем используйте конвертер на ваших кнопках. Пятиминутный рецепт для приличного BoolToVisibilityConverter - хороший пост, чтобы прочитать о создании / использовании конвертера видимости.

В прошлом я использовал конвертер bool to visibility ипередается в свойство IsEnabled кнопки в качестве параметра для конвертера.Поскольку кнопка отключена / включена командой в модели с методом CanExecute, вы можете использовать свойство IsEnabled, чтобы установить видимость кнопки с конвертером.

1 голос
/ 18 августа 2010

Причина, по которой ваш триггер не работает, заключается в том, что стиль переопределяется атрибутом на самой кнопке.

Вы можете использовать конвертер, как предлагает Metro Smurf, или же вы можете переместить атрибут видимости встиль, чтобы триггер работал правильно

Просто добавьте:

<Style.Setters>
    <Setter Property="Visibility" Value="Hidden" />
</Style.Setters>

В стиль и затем удалите атрибут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...