wpf - 根据 Silverlight/WPF 中绑定(bind)数据的值切换数据模板

标签 wpf silverlight data-binding datatemplate

假设我正在使用 WPF 或 Silverlight 并将 ContentPresenter 绑定(bind)到整数属性:

<ContentPresenter Content={Binding Score} />

如果分数是 10,我想显示一个金星,否则只显示数字。所以基本上我有两个可能的数据模板:
<Path Fill="Gold" Data="..." />

<TextBlock Text="{Binding Score}" />

设置它的最佳方法是什么?是使用绑定(bind)转换器吗?或者绑定(bind)到动态加载适当的数据模板 xaml 并根据 Score 的值生成正确的 FrameworkElement 的不同对象?还是我缺少另一个技巧 - 也许 ContentPresenter 不是正确的控件?

我想知道你是否可以做这样的事情,但它不喜欢 ContentTemplate 值中的嵌套绑定(bind):
<StackPanel>
    <StackPanel.Resources>
        <DataTemplate x:Key="LowScore">
            <TextBlock Text="{Binding Path=Score}" Foreground="Red" />
        </DataTemplate>
        <DataTemplate x:Key="HighScore">
            <Path Fill="Gold" Data="M 0,0 l 10,0 l 5,-10 l 5,10 l 10,0 l -7,10 l 2,10 l -10,-5 l -10,5 l 2,-10 Z" />
        </DataTemplate>

    </StackPanel.Resources>
    <ContentPresenter Content="{Binding Score}" ContentTemplate="{StaticResource ResourceKey={Binding ScoreTemplate}}">
    </ContentPresenter>
</StackPanel>

最佳答案

您可以使用模板选择器。 Here is a nice tutorial on Switch On The Code .基本上,模板选择器允许您根据所需的任何条件为项目选择模板。

关于wpf - 根据 Silverlight/WPF 中绑定(bind)数据的值切换数据模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4136882/

相关文章:

wpf - 仅带有垂直滚动条的 TextBlock

c# - 项目命令无法编辑列表中的其他项目

c# - ListView 中的 WPF、MVVM、EventBehaviourFactory,将事件绑定(bind)到命令

silverlight - MediaElement 可以播放 QuickTime (.mov) 文件吗?

r - 在R中合并具有不同列数的数据框列表?

WPF ObservableCollection 编辑模式

VS 2010 中的 Silverlight 单元测试集成?

wcf - 带有对象列表的数据绑定(bind) Silverlight 组合框 - 工作但丑陋

java - Spring MVC 自定义方法参数绑定(bind)

.net - 从 DataTemplate 访问父 DataContext