繁体   English   中英

传递给WPF资源控件的属性在资源主机的数据上下文中评估

[英]Properties passed to a WPF resource control evaluate in data context of the resource host

我有一个用户控件,该控件使用数据触发器来确定为集合中的每个选项卡项目显示哪种类型的选项卡内容。

选项卡的内容来自用户控件,它们具有自己的依赖项属性来控制其内容。

传递给这些依赖项属性的值应绑定到集合中相应选项卡项的属性。

这是我的结构的一些简化和简化的代码:

<UserControl x:Class="MyApp.TabArea"
    ...
>
    <Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}">
        <TabControl ItemsSource="{Binding Tabs}">
            <TabControl.Resources>
                <local:SomeDetail x:Key="SomeDetailControl" x:Shared="False" Prop="{Binding PropValue}" PropTwo="{Binding PropTwoValue}" />
            </TabControl.Resources>
            <TabControl.ItemTemplate>
                ...
            </TabControl.ItemTemplate>

            <TabControl.ItemContainerStyle>
                <Style TargetType="TabItem">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding MyBinding}" Value="True">
                            <Setter Property="Content" Value="{StaticResource SomeDetailControl}" />
                        </DataTrigger>
                        ...
                    </Style.Triggers>
                </Style>
            </TabControl.ItemContainerStyle>
        </TabControl>
    </Grid>
</UserControl>

我已将详细用户控件放置在选项卡控件的资源中,将其标记为未共享,并添加了一些绑定。

据我了解,在这种情况下,使用控件时会评估这些绑定。 但是,我收到一个绑定错误,即在用户控件上找不到PropValue等。

最初,我想知道Grid数据上下文是否可以解决此问题,但是删除它只是将错误移至包含组件。

我也尝试过将资源移到网格上 ,而样式本身却无济于事。

如何确保资源附加属性的绑定来自选项卡项目对象?

我有一个用户控件,该控件使用数据触发器来确定为集合中的每个选项卡项目显示哪种类型的选项卡内容。

您应该使用ContentTemplateSelector来选择适当的DataTemplatehttps : //jacobaloysious.wordpress.com/2013/08/19/mvvm-using-contenttemplateselector-in-tab-control-view/

或者您可以尝试使用ContentTemplate

<Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}">
    <TabControl ItemsSource="{Binding Tabs}">
        <TabControl.ContentTemplate>
            <DataTemplate>
                <DataTemplate.Resources>
                    <local:SomeDetail x:Key="SomeDetailControl" x:Shared="False"  Prop="{Binding PropValue}" PropTwo="{Binding PropTwoValue}" />
                </DataTemplate.Resources>
                <ContentControl>
                    <ContentControl.Style>
                        <Style TargetType="ContentControl">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <TextBlock>default template...</TextBlock>
                                </Setter.Value>
                            </Setter>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding MyBinding}" Value="True">
                                    <Setter Property="Content" Value="{StaticResource SomeDetailControl}" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ContentControl.Style>
                </ContentControl>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>
</Grid>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM