单击一下按钮,在wpf中禁用其他按钮

时间:2014-08-28 16:01:42

标签: c# wpf design-patterns user-controls

我有一个带有2个标签的应用程序,分别是A和B.两个标签都有2个按钮。除了标签外还有1个OK按钮。 (参见截图)

enter image description here

我有 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. 当我单击选项卡A按钮1或2时,选项卡B和确定中的按钮将是 禁用。
  2. 单击“确定”按钮时,将禁用“选项卡A”或“B”按钮。
  3. 如果单击选项卡B按钮1或2,将禁用选项卡A和确定按钮。
  4. *(禁用大约5-10秒,然后按钮将启用后退)

    不使用棱镜框架等。

2 个答案:

答案 0 :(得分:0)

这里的问题是你正在考虑这个问题。问题不是&#34;如何禁用这些按钮?&#34;问题应该是&#34;什么状态是&#39;启用&#39;按钮绑在?&#34;

要使其工作,按钮命令处理程序需要设置一些导致其他按钮禁用的变量(状态)。请注意,这意味着您的两个标签之间存在(可能不合需要的)依赖关系,但根据您的要求,这可能是不可避免的。

基本上,您需要让按钮看起来像:

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

Where&#34; SomeProperty&#34;由另一个&#34; SomeCommand&#34;处理程序(用于其他按钮)。

希望那清楚!如果您有任何问题,请告诉我。

答案 1 :(得分:0)

如果您使用的是ICommand,则可以将按钮订阅给其他CanExecuteChanged个事件,以便相关按钮可以在每个相应的CanExecuteChanged被引发后启用。您必须为每个命令添加CanExecuteChanged_Handler,以便在调用处理程序时,您可以检查发件人是谁并更改其canExecute状态。