在Tabcontrol datatemplate中将关闭命令绑定到按钮的问题

时间:2009-03-22 20:27:35

标签: wpf prism command tabcontrol binding

我使用复合应用Guidiance Pattern来构建我的WPF应用程序。在我的Shell中,我有一个tabcontrol,它包含一个区域,用于动态地将视图加载到该区域。视图将加载到TabControl中的新选项卡中。

  <TabControl     
      AutomationProperties.AutomationId="MainTabControl" 
      cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}" 
      Width="Auto" Height="Auto" Margin="10,10,0,0" 
      HorizontalAlignment="Stretch"                            
      IsSynchronizedWithCurrentItem="True"
      ItemTemplate="{StaticResource TabItemTemplate}"
SelectionChanged="TabControl_SelectionChanged">

我有一个DataTemplate“TabItemTemplate”用于实现CloseButton。我无法弄清楚如何将DataTemplate中的按钮命令绑定到presentationModel中的Close命令。如果我将命令绑定到CompositCommand,则命令为executet。但是我必须弄清楚按下按钮的选项卡,只在该PresentationModel中执行closeCommand。下面是dataTemplate。

<DataTemplate x:Key="ClosableTabItemTemplate">
            <DockPanel Width="120">
                <Button 
                    Command="inf:CloseCommands.CloseCommand"
                    Content="X"
                    Cursor="Hand"
                    DockPanel.Dock="Right"
                    Focusable="False"
                    FontFamily="Courier" 
                    FontSize="9"
                    FontWeight="Bold"  
                    Margin="0,1,0,0"
                    Padding="0"
                    VerticalContentAlignment="Bottom"
                    Width="16" Height="16" 
                    />
                <ContentPresenter 
        Content="{Binding}" 
        VerticalAlignment="Center" 
        />
            </DockPanel>
        </DataTemplate> 

有谁知道如何解决这个绑定问题?

3 个答案:

答案 0 :(得分:1)

我在学习Prism时遇到了同样的问题,并使用元素绑定解决了这个问题。

<Button Content="x" Command="{Binding ElementName=Scooby, Path=Content.DataContext.CloseCommand}" />

其中Scooby是我的shell窗口的名称, CloseCommand 是Shell的ViewModel中的Prism DelegateCommand

我认为我应该在此处添加此内容,因为它会向您的解决方案展示另一种方式。

答案 1 :(得分:0)

您应该绑定到viewmodel上的命令实例,例如由属性公开的DelegateCommand,或者将CommandParameter绑定到TabItem的DataContext,以便可以为该项传递共享命令。

答案 2 :(得分:0)

我找到了解决这个问题的方法。问题是当我将UserControl绑定到TabControl时,它只是设置为usercontrol的contentpane的datacontext,并且headerpane的datacontext仍为null。但是,如果我定义两个数据窗口,一个用于项目,一个用于内容,然后将presentationModel添加到区域,则填充项目和内容的dataContext。然后我可以在itemTemplate中绑定到presentationModel中的delegateCommand属性。