1

我正在使用复合应用程序指导模式来构建我的 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">

我有一个用于实现 CloseButton 的 DataTemplate“TabItemTemplate”。我不知道如何将 DataTemplate 中的按钮命令绑定到 PresentationModel 中的关闭命令。如果我将命令绑定到 CompositCommand,则执行该命令。但随后我必须找出关闭按钮被按下的选项卡,并且只在该 PresentationModel 中执行 closeCommand。下面是数据模板。

<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> 

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

4

3 回答 3

1

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

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

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

我想我应该在这里添加它,因为它会展示您解决方案的另一种方法。

于 2014-01-29T15:09:33.997 回答
0

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

于 2009-03-22T22:30:43.130 回答
0

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

于 2009-03-24T06:39:21.387 回答