C# 在wpf中单击一个按钮禁用其他按钮

C# 在wpf中单击一个按钮禁用其他按钮,c#,wpf,design-patterns,user-controls,C#,Wpf,Design Patterns,User Controls,我有一个应用程序,有两个选项卡,分别是A和B。两个选项卡都有两个按钮。除此之外,在标签外还有一个OK按钮。请参阅屏幕截图 我有3个视图模型,它们是SampleApplication、taba和tabb以及do绑定 示例应用程序XAML <DockPanel LastChildFill="True"> <TabControl TabStripPlacement="Left" DockPanel.Dock="Left" Margin="5"> &l

我有一个应用程序,有两个选项卡,分别是A和B。两个选项卡都有两个按钮。除此之外,在标签外还有一个OK按钮。请参阅屏幕截图

我有3个视图模型,它们是SampleApplication、taba和tabb以及do绑定

示例应用程序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>
如何实施

当我单击Tab A按钮1或2时,将显示Tab B和OK中的按钮 残废 单击“确定”按钮时,选项卡A或B按钮将被禁用。 如果单击选项卡B按钮1或2,选项卡A和确定按钮将被禁用。 *禁用约5-10秒,然后按钮将启用返回


禁止使用prism框架等。

这里的问题是您对该问题的思考不正确。问题不是如何禁用这些按钮?问题应该是按钮的“启用”状态是什么

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

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

<Button IsEnabled="{Binding SomeProperty}" Command="{Binding SomeCommand}"/>
其中,SomeProperty由其他按钮的其他SomeCommand处理程序调用的函数更改


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

如果您使用的是ICommand,您可以将按钮订阅给彼此的CanExecuteChanged事件,以便在引发每个CanExecuteChanged事件后,从属按钮可以自行启用。您必须为每个命令添加一个CanExecuteChanged_处理程序,以便在调用该处理程序时,您可以检查发送者是谁并更改其canExecute状态。

这可能很难进行跨用户控制。我认为你是在正确的轨道上,但这需要更多的细节。另外,CanExecute和CanExecuteChanged很难合作:@BradleyDotNET我同意你的看法。他必须找到一个可以初始化这些ICommand的公共位置。@berkeleyjuan各位,谢谢你们的回复,并将很快更新答案xDHi@BradleyDotNET,我能通过以下示例使用这种方法吗?不,那篇文章解决了我用另一个答案提出的问题。我尽可能避免使用静态类,所以除非我不得不这样做,否则我不会使用这种方法。您好,我将尝试您稍后提到的上述说法,谢谢yahi@BradleyDotNET这里是我创建的示例的链接,请随意查看,并帮助建议是否有改进或应用模式的方法。
<Button IsEnabled="{Binding SomeProperty}" Command="{Binding SomeCommand}"/>