【问题标题】:How to expose properties of a WPF DataTemplate?如何公开 WPF DataTemplate 的属性?
【发布时间】:2009-03-30 17:59:04
【问题描述】:
我有一个在许多页面中使用的数据模板,数据模板包含几个按钮,我想通过触发器隐藏其中一些按钮(我的意思是在我使用它的页面中设置这些按钮的 IsEnabled 属性数据模板)。
换句话说,我什至想在样式触发器/设置器中设置一个属性 'ButtonXIsEnabled'、'ButtonYIsEnabled' 作为我使用此 DataTemplate 的 ListBox 中可设置的 DataTemplate 的一部分。
我真的希望我足够清楚,请留下 cmets 了解更多详情。
任何讨论都将不胜感激!
提前致谢。
【问题讨论】:
标签:
wpf
properties
datatemplate
setter
static-resource
【解决方案1】:
这基本上取决于您用于数据模板的对象。而不是使用一些 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>
【解决方案2】:
WPF 数据模板是特定对象类型的视图...您希望 ObjectTypeX 的实例看起来如何。数据模板可以绑定到底层实例的属性。
因此,如果您的实例上有 ButtonXIsEnabled 属性,则可以将相应的 Button 的 Visibility 属性绑定到实例属性。该按钮将根据基础对象中的值显示或隐藏。