prism - 无法为TabItem的HeaderTemplate设置绑定

时间:2012-03-21 13:17:58

标签: wpf prism prism-4

我有一个名为ProductEditView的UserControl,我将其添加到MainWindow(shell)的某个区域。我在Shell区域有一个TabControl来显示ProductEditView,如下所示

<TabControl Name="tabEditProduct" 
            prism:RegionManager.RegionName="TabContent"

    <TabControl.ItemContainerStyle>
    <Style TargetType="TabItem">
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <DockPanel LastChildFill="True" >
                        <Button Width="16" Height="16" Command="{Binding Path=CloseTabCommand}" 
                                        DockPanel.Dock="Right" BorderThickness="0" Padding="0"
                                        BorderBrush="Transparent" Background="Transparent">
                            <Image Source="Images/close-icon.png" Width="14" Height="14" 
                                           HorizontalAlignment="Stretch" Margin="0"/>
                        </Button>
                        <TextBlock Text="{Binding ProductName}" 
                                           DockPanel.Dock="Left" Margin="0,0,10,0" />
                    </DockPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    </TabControl.ItemContainerStyle>
</TabControl>

在TabItem的HeaderTemplate中,我试图使用绑定显示Product Object中的文本。不幸的是绑定不起作用,但我可以将静态文本显示为标题。 是否可以使用上述绑定显示标签项的标题文本?

为了完整性,我还将视图粘贴到EditControl区域中以TabItem加载的Edit Product。这种绑定运作良好。这是ProductEditView

<UserControl x:Class="TextExisting.CoreModule.ProductEditView"
....

        <Grid HorizontalAlignment="Center" DataContext="{Binding Path=Product}" Grid.Row="0" Grid.Column="0">
        ....
            <TextBlock Text="Id" Grid.Row="0" Grid.Column="0"/>
            <TextBox Grid.Row="0" Grid.Column="1" 
                     Text="{Binding Path=Id, NotifyOnValidationError=True, ValidatesOnExceptions=True}" />

            <TextBlock Text="Product Name" Grid.Row="1" Grid.Column="0"/>
            <TextBox Grid.Row="1" Grid.Column="1" 
                     Text="{Binding Path=ProductName, NotifyOnValidationError=True, ValidatesOnExceptions=True}" />
            ....
        </Grid>
        <Button Command="{Binding SaveProductCommand}" Content="Save Product" HorizontalAlignment="Center"/>

</UserControl>

2 个答案:

答案 0 :(得分:0)

也许添加这样的东西  "{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Path=DataContext.ProductName}"

这将向上移动并找到usercontrol的datacontext,它带有绑定到视图模型及其属性。

这是一个使用WPF Cheat Sheet

的小作弊表

答案 1 :(得分:-1)

Here是解释如何在此方案中进行绑定的链接。