Как предоставить доступ к свойствам WPF DataTemplate?
-
22-08-2019 - |
Вопрос
У меня есть шаблон данных, который я использую на многих страницах, шаблон данных содержит несколько кнопок, я хочу скрыть некоторые из этих кнопок с помощью триггеров (я имею в виду установку свойства IsEnabled этих кнопок на странице, где я использую эту DataTemplate).
Другими словами, я бы даже хотел установить в триггерах / установщиках стиля свойство 'ButtonXIsEnabled', 'ButtonYIsEnabled' как часть таблицы настроек DataTemplate из списка, где я использую эту DataTemplate.
Я действительно надеюсь, что я достаточно ясно выразился, пожалуйста, оставляйте комментарии для получения любой дополнительной информации.
Любое обсуждение будет действительно оценено!Заранее благодарю.
Решение
В основном это зависит от того, какой объект вы используете для своей datatemplate.Вместо того, чтобы использовать какую-то 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>
Другие советы
Шаблон данных WPF - это представление определенного типа объекта...как вы хотите, чтобы экземпляр ObjectTypeX выглядел.Шаблон данных может привязываться к свойствам базового экземпляра.
Таким образом, если у вас есть свойство ButtonXIsEnabled в вашем экземпляре, вы можете привязать свойство видимости соответствующей кнопки к свойству instance.Кнопка будет отображаться или скрыта в зависимости от значения в базовом объекте.