Установить свойство родительского элемента управления из шаблона данных - PullRequest
4 голосов
/ 06 декабря 2010

Как я могу установить свойство для родительского / родительского элемента управления из шаблона данных?

Единственный способ, которым я могу придумать, - создать фиктивный невидимый элемент управления в моей форме, а затем связать одно из свойств с правильным значением по умолчанию, используя привязку конвертора, onewaytosource и родственника sourceancestor, что является довольно ужасным решением.

То, что я хотел бы сделать, - это иметь возможность настроить сеттер на другой элемент управления практически так же, как вы можете использовать привязку с другим источником.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

Предполагая, что ваш предок является внутренним по отношению к шаблону данных, вы можете дать имя этому предку, используя свойство "Имя". Когда у него есть имя, вы можете использовать «TargetName» сеттера, чтобы указать этого предка.

Пример:

<DataTemplate>
    <Grid Name="ControlGrid">
        <Path x:Name="Arrow" Fill="Black">
            <Path.Triggers>
                <Trigger Property="IsEnabled" Value="false">
                    <Setter Property="Visibility" TargetName="ControlGrid" Value="Collapsed"/>
                </Trigger>
            </Path.Triggers>
        </Path>
    </Grid>
</DataTemplate>
0 голосов
/ 06 декабря 2010

Несколько возможных вариантов: 1) В привязке внутри DataTemplate задайте в качестве источника родительский элемент, используя ElementName, и выполните привязку, используя OneWayToSource.Это перенесет значение из цели привязки (элемент внутри DataTemplate) в источник привязки (родительский элемент управления). 2) Используйте общий объект, с которым связаны и DataTemplate, и элемент управления.DataTemplate будет привязываться к нему с помощью OneWayToSource, а элемент управления будет привязываться к нему с помощью OneWay.Это может быть даже ресурс, поэтому вы можете получить к нему доступ из XAML.3) Используйте RelativeSource и FindAncestor.4) Используйте какое-то перенаправленное событие и обработайте его на уровне управления.Он будет запущен из шаблона данных с помощью прикрепленного поведения (Google!).Событие доставит данные, а обработчик события установит соответствующее свойство в элементе управления.

Параметры 1,3 аналогичны предложенным вами.Варианты 2, 4 разные.С точки зрения элегантности я предпочитаю вариант 2.

Кроме того - будьте в курсе конфликтов во всех решениях.Если DataTemplate создается много раз внутри одного элемента управления, все экземпляры будут пытаться установить свойство элемента управления.Эффект будет эффектом последней выполненной попытки набора, и в некоторых случаях это может быть проблематично, если вы не можете контролировать их порядок.

Алекс.

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