Привязать собственность на правнука к предку - PullRequest
1 голос
/ 13 октября 2010

Я даже не уверен, как это выразить, поэтому мне очень жаль, если название сбивает с толку ... Мой 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 шаблонизирован внутриthe legendcontrol.

Выражение привязки завершается с ошибкой System.Windows.Data: 4. Вместо этого я попытался использовать elementname с теми же результатами.Я предполагаю, что это как-то связано с тем, что LegendItems не находятся непосредственно в дереве визуалов, но я понятия не имею (новичок WPF, я знаю).Что я делаю неправильно?

1 Ответ

1 голос
/ 13 октября 2010

У вас есть опечатка в 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, если не уверены, каким оно должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...