gmn*_*gmn 18 c# data-binding wpf xaml
我有一组绑定到分层数据模板的对象,我的每个对象都有一个属性(我们称之为属性"A")属于某种类型.这种类型在每个对象之间变化.
如果数据模板包含图像和某些文本,那么根据属性"A"的类型更改模板中显示的图像的最佳方法是什么.
我知道我可以把它放到转换器中并在代码中手动进行绑定转换,但是在WPF中提供了所有绑定工具,我认为这可能是更好的方法.
Rob*_*ney 36
如果您创建本地数据模板并使用a,则在数据模板中执行此操作非常简单ContentPresenter.此模板显示类型的对象MyObject,显示一个图像,其源由显示属性内容的A旁边的属性类型确定:TextBlockText
<DataTemplate DataType="{x:Type MyObject}">
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<DataTemplate DataType="{x:Type Thing1}">
<Image Source="thing1.png"/>
</DataTemplate>
<DataTemplate DataType="{x:Type Thing2}">
<Image Source="thing2.png"/>
</DataTemplate>
</StackPanel.Resources>
<ContentPresenter Content="{Binding A}"/>
<TextBlock Text="{Binding Text}"/>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如果要使用样式要做到这一点,而不是,你会碰到一个问题,因为数据触发器想看看属性值,和类型的的A财产不是本身,暴露的属性.
当然,除非你实施一个:
public Type AType { get { return A.GetType(); } }
Run Code Online (Sandbox Code Playgroud)
(您还需要提高PropertyChanged对AType的当值A的变化.)一旦你这样做,你应该能够实现一种风格,例如数据触发:
<Style TargetType="Image">
<Setter Property="Source" Value="default.png"/>
<Style.Triggers>
<DataTrigger Binding="{Binding AType}" Value="{x:Type Thing1}">
<Setter Property="Source" Value="thing1.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding AType}" Value="{x:Type Thing2}">
<Setter Property="Source" Value="thing2.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)