одно нажатие кнопки отключить другие кнопки в wpf

1

У меня есть приложение с двумя вкладками, которые являются A и B. На обеих вкладках есть две кнопки. Кроме того, на вкладке появилась кнопка "ОК". (см. скриншот)

Изображение 174551

У меня есть 3 модели просмотра, которые являются SampleApplication, Tab A и Tab B и являются обязательными.

Пример приложения XAML

  <DockPanel LastChildFill="True">
    <TabControl TabStripPlacement="Left" DockPanel.Dock="Left" Margin="5">
        <TabItem Width="190" Margin="1">
            <TabItem.Header>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Tab A" Margin="5,0,0,0" VerticalAlignment="Center" />
                </StackPanel>
            </TabItem.Header>
            <TabItem.ContentTemplate>
                <DataTemplate>
                    <ptab:TabA />
                </DataTemplate>
            </TabItem.ContentTemplate>
        </TabItem>
        <TabItem Margin="1">
            <TabItem.Header>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="TabB" Margin="5,0,0,0" VerticalAlignment="Center" />
                </StackPanel>
            </TabItem.Header>
            <TabItem.ContentTemplate>
                <DataTemplate>
                    <ptab:TabB />
                </DataTemplate>
            </TabItem.ContentTemplate>
        </TabItem>
    </TabControl>
</DockPanel>

Пример модели представления приложения

 public class SampleApplicationViewModel
{
    private TabAViewModel tabAViewModel;

    public TabAViewModel TabAVM 
    {
        get { return tabAViewModel; }
        set { tabAViewModel= value; }
    }

    private TabBViewModel tabBViewModel;

    public TabBViewModel TabBVM 
    {
        get { return tabBViewModel; }
        set { tabBViewModel= value; }
    }

    public MainViewModel()
    {
        tabAViewModel= new TabAViewModel();
        tabBViewModel= new TabBViewModel ();
    }
}

Как реализовать

  1. когда я нажимаю Tab A Button 1 или 2, кнопки в Tab B и OK будут отключены.
  2. При нажатии кнопки "ОК" кнопки Tab A или B будут отключены.
  3. Если нажать кнопку Tab B 1 или 2, кнопки Tab A и Ok будут отключены.

* (отключить около 5-10 сек, затем кнопки вернут обратно)

нет использования рамки призмы и т.д.

Теги:
wpf
design-patterns
user-controls

2 ответа

0

Если вы используете ICommand вы можете подписаться на кнопки для каждого события CanExecuteChanged чтобы зависимая кнопка могла активировать себя после CanExecuteChanged будет поднят каждый соответствующий CanExecuteChanged. Вам нужно будет добавить CanExecuteChanged_Handler для каждой команды, поэтому, когда вызывается обработчик, вы можете проверить, кто отправитель, и изменить его состояние canExecute.

  • 0
    Это, вероятно, будет трудно сделать межпользовательский контроль. Я думаю, что вы на правильном пути (вроде), но это требует гораздо больше деталей. Кроме того, с CanExecute и CanExecuteChanged действительно сложно работать :(
  • 0
    @BradleyDotNET Я согласен с вами. ему нужно было бы найти общее место, где он мог бы инициализировать эти ICommand.
Показать ещё 1 комментарий
0

Проблема здесь в том, что вы думаете о проблеме неправильно. Вопрос не в том, "Как отключить эти кнопки?" Вопрос должен быть "Какое состояние" включенность "кнопок, привязанных к?"

Чтобы заставить это работать, обработчики команд кнопок должны установить некоторую переменную (состояние), которая заставляет другие кнопки отключать. Обратите внимание, что это означает, что есть (возможно, нежелательная) зависимость между вашими двумя вкладками, но с вашими требованиями это, вероятно, неизбежно.

В принципе, вам нужно, чтобы ваши кнопки выглядели так:

<Button IsEnabled="{Binding SomeProperty}" Command="{Binding SomeCommand}"/>

Где "SomeProperty" изменяется функцией, вызываемой другими обработчиками "SomeCommand" (для других кнопок).

Надеюсь, это ясно! Дайте знать, если у вас появятся вопросы.

  • 0
    спасибо за ответ сделаю и скоро обновлю
  • 0
    Привет @BradleyDotNET, могу ли я использовать этот подход, следуя этому примеру? codeproject.com/Articles/28081/...
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню