У меня есть приложение с двумя вкладками, которые являются A и B. На обеих вкладках есть две кнопки. Кроме того, на вкладке появилась кнопка "ОК". (см. скриншот)
У меня есть 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 ();
}
}
Как реализовать
* (отключить около 5-10 сек, затем кнопки вернут обратно)
нет использования рамки призмы и т.д.
Если вы используете ICommand
вы можете подписаться на кнопки для каждого события CanExecuteChanged
чтобы зависимая кнопка могла активировать себя после CanExecuteChanged
будет поднят каждый соответствующий CanExecuteChanged
. Вам нужно будет добавить CanExecuteChanged_Handler
для каждой команды, поэтому, когда вызывается обработчик, вы можете проверить, кто отправитель, и изменить его состояние canExecute.
Проблема здесь в том, что вы думаете о проблеме неправильно. Вопрос не в том, "Как отключить эти кнопки?" Вопрос должен быть "Какое состояние" включенность "кнопок, привязанных к?"
Чтобы заставить это работать, обработчики команд кнопок должны установить некоторую переменную (состояние), которая заставляет другие кнопки отключать. Обратите внимание, что это означает, что есть (возможно, нежелательная) зависимость между вашими двумя вкладками, но с вашими требованиями это, вероятно, неизбежно.
В принципе, вам нужно, чтобы ваши кнопки выглядели так:
<Button IsEnabled="{Binding SomeProperty}" Command="{Binding SomeCommand}"/>
Где "SomeProperty" изменяется функцией, вызываемой другими обработчиками "SomeCommand" (для других кнопок).
Надеюсь, это ясно! Дайте знать, если у вас появятся вопросы.
CanExecute
иCanExecuteChanged
действительно сложно работать :(