将曾孙子的财产与祖先捆绑在一起

时间:2010-10-13 11:20:59

标签: wpf xaml binding

我甚至不确定如何表达这一点,所以我非常抱歉,如果标题令人困惑..我的XAML(简化)看起来像这样:

<UserControl x:Class="PBA.Application.Client.UserControls.UserControls.FreqReserve.OverView" xmlns:FreqReserve="clr-namespace:PBA.Application.Client.UserControls.UserControls.FreqReserve">
...
    <DockPanel>
        <UserControls:LegendControl>
            <UserControls:LegendControl.Items>
                <UserControls:LegendItem Visibility="{Binding Path=IsDirtyVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type FreqReserve:OverView}}, Converter={StaticResource btvc}}" Identifier="Pink" Text="Ikke sendt"></UserControls:LegendItem>
                <UserControls:LegendItem Identifier="Yellow" Text="Sendt"></UserControls:LegendItem>
                <UserControls:LegendItem Identifier="LightGreen" Text="Accepteret"></UserControls:LegendItem>
                <UserControls:LegendItem Identifier="White" Text="Ikke accepteret"></UserControls:LegendItem>
            </UserControls:LegendControl.Items>
        </UserControls:LegendControl>
    </DockPanel>
</UserControl>

其中LegendItem列表是在legendcontrol中模板化的。

绑定表达式失败,出现System.Windows.Data错误:4。我尝试使用elementname,结果相同。我猜它与LegendItems有关,实际上并不直接在Visual树中,但我不知道(WPF菜鸟,我知道)。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

AncestorType中有拼写错误。你想说FreqReserve.OverView。此外,您将不得不引用UserControl中定义的库名称空间。

这样的事情:

<UserControl x:Class="PBA.Application.Client.UserControls.UserControls.FreqReserve.OverView"
             ...
             xmlns:local="clr-namespace:PBA.Application.Client.UserControls.UserControls">

    ...
       <DockPanel>
        <UserControls:LegendControl>
            <UserControls:LegendControl.Items>
                <UserControls:LegendItem IsVisible="{Binding Path=IsDirtyVisible, 
                    RelativeSource={RelativeSource Mode=FindAncestor, 
                                    AncestorType={x:Type local:FreqReserve.OverView}}}" 
                    Identifier="Pink" 
                    Text="Ikke sendt"></UserControls:LegendItem>

               ....         

        </UserControls:LegendControl>
    </DockPanel>
</UserControl>

请注意,您必须为“本地”声明添加正确的命名空间,但如果您不确定它应该是什么,则应该从IntelliSense获取。