我使用复合应用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>
有谁知道如何解决这个绑定问题?
答案 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属性。