English 中文(简体)
绑定在TabControl数据模板中的按钮的关闭命令的问题
原标题:
  • 时间:2009-03-22 20:27:34
  •  标签:

我正在使用复合应用程序指南模式来构建我的WPF应用。在我的壳体中,我有一个选项卡控件,其中包含一个区域,用于动态加载视图到该区域。视图会加载到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">

我有一个名为“TabItemTemplate”的DataTemplate,用于实现CloseButton。我无法弄清楚如何将DataTemplate中的按钮命令绑定到PresentationModel中的Close命令。如果我将命令绑定到CompositeCommand,则会执行该命令。但是,然后我必须弄清楚按下关闭按钮的选项卡,并仅在该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> 

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

最佳回答

我找到了解决这个问题的方法。问题是当我将一个UserControl绑定到一个TabControl时,只有contentpane的数据上下文被设置到了usercontrol上,而头部pane的数据上下文仍然为空。但是,如果我定义两个数据模板,一个用于项,另一个用于内容,然后将presentationModel添加到区域中,那么项和内容的数据上下文都会被填充。然后我可以在itemTemplate中绑定到presentationModel中的delegateCommand属性。

问题回答

我在学习Prism时遇到了相同的问题,最终通过使用元素绑定来解决它。

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

Scooby是我的shell窗口的名称,CloseCommand是Shell视图模型中的PrismDelegateCommand

我认为我应该在这里加入这个,因为它可以展示出你的解决方法的另一种方式。

你应该在 ViewModel 上绑定到命令实例,例如通过属性公开的 DelegateCommand,或者将 CommandParameter 绑定到 TabItem 的 DataContext,以便共享命令可以传递给该项。





相关问题
热门标签