Как раскрыть свойства шаблона данных WPF?

У меня есть шаблон данных, который я использую на многих страницах, шаблон данных содержит несколько кнопок, я хочу скрыть некоторые из этих кнопок триггерами (я имею в виду настройку свойства IsEnabled этих кнопок на странице, где я использую этот DataTemplate).

Другими словами, я даже хотел бы установить в триггерах/сеттерах стиля свойство «ButtonXIsEnabled», «ButtonYIsEnabled» как часть устанавливаемого DataTemplate из ListBox, где я использую этот DataTemplate.

Я действительно надеюсь, что я достаточно ясен, пожалуйста, оставьте комментарии для получения дополнительной информации.

Любое обсуждение будет действительно оценено! Заранее спасибо.


person Shimmy Weitzhandler    schedule 30.03.2009    source источник


Ответы (2)


В основном это зависит от того, какой объект вы используете для своего шаблона данных. Вместо использования некоторых ButtonYIsEnabled и т.д. Попробуйте использовать некоторые слова, которые лучше подходят для вашей модели предметной области.

Например, скажем, у вас есть список клиентов, и некоторые из этих клиентов имеют возможность покупать товары со скидкой. Затем добавьте в свой клиент свойство CanPurchaseDiscountedProducts и используйте это свойство в своем DataTemplate.

<DataTemplate TargetType="{x:Type local:Customer}">
  <!-- Other Items -->
  <Button Content="Purchase Discounted Products" x:Name="discounts" Visibility="Hidden" />
  <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding CanPurchaseDiscountedProducts}" Value="True">
      <Setter TargetName="discounts" Property="Visibility" Value="Visible"/>
    </DataTrigger>
  </DataTemplate.Triggers>
</DataTemplate>
person bendewey    schedule 30.03.2009

Шаблон данных WPF — это представление определенного типа объекта... как вы хотите, чтобы экземпляр ObjectTypeX выглядел. Шаблон данных может привязываться к свойствам базового экземпляра.

Таким образом, если у вас есть свойство ButtonXIsEnabled в вашем экземпляре, вы можете привязать соответствующее свойство Button's Visibility к свойству экземпляра. Кнопка будет отображаться или скрываться в зависимости от значения в базовом объекте.

person Gishu    schedule 30.03.2009
comment
Нет, я имел в виду, когда вы используете DataTemplate на уровне представления (он объявлен в приложении), я хочу изменить свойства DataTemplate в соответствии с чем-то на этой странице. - person Shimmy Weitzhandler; 02.04.2009