将CommandTarget设置为TabControl中的选定控件

时间:2010-05-26 07:12:32

标签: wpf datatemplate tabcontrol

我有一个带有几个按钮的WPF窗口和一个tabcontrol,其中包含用户正在处理的每个“文档”的选项卡。 tabcontrol使用DataTemplate在tabcontrol的ItemSource中呈现数据。

问题:如果单击其中一个按钮,则应在控件上执行该命令,在活动选项卡中呈现文档,但我不知道应该将CommandTarget设置为什么。我试过{Binding ElementName = nameOfControlInDataTemplate},但这显然不起作用。

我尝试使用以下代码使我的问题更抽象(没有ItemSource和Document对象,但想法仍然相同)。

<Button Command="ApplicationCommands.Save" CommandTarget="{Binding ElementName=nestedControl}">Save</Button>
<TabControl x:Name="tabControl">
    <TabControl.Items>
        <TabItem Header="Header1">Item 1</TabItem>
        <TabItem Header="Header2">Item 2</TabItem>
        <TabItem Header="Header3">Item 3</TabItem>
    </TabControl.Items>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <CommandTest:NestedControl Name="nestedControl"/>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

我通过仅使用一个NestedControl替换完整的tabcontrol来测试代码,然后命令按钮才起作用。

要完成,这里是NestedControl的代码:

<UserControl x:Class="CommandTest.NestedControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Label x:Name="label" Content="Not saved"/>
    </Grid>
</UserControl>

代码背后:

public partial class NestedControl : UserControl {
    public NestedControl() {
        CommandBindings.Add(new CommandBinding(ApplicationCommands.Save, CommandBinding_Executed));
        InitializeComponent();
    }

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) {
        label.Content = "Saved";
    }
}

1 个答案:

答案 0 :(得分:0)

我不确切知道CommandTarget是如何工作的,但是在TabControl中绑定到活动选项卡是这样的:

"{Binding ElementName=tabControl,Path=SelectedItem}"

(SelectedItem是当前活动标签)

编辑:

有关CommandTarget的更多信息,请访问:Setting Command Target in XAML

编辑2:

删除了我的初步答案,因为它不是问题的答案。