我有一个带有2个标签的应用程序,分别是A和B.两个标签都有2个按钮。除了标签外还有1个OK按钮。 (参见截图)
我有 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秒,然后按钮将启用后退)
不使用棱镜框架等。
答案 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状态。