将DataTemplate作为资源使用并进行可定制绑定

4

我有一个 DataTemplate,用于展示带符号的值,看起来类似于这样:

<DataTemplate>
    <TextBlock VerticalAlignment="Center">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0:G} {1}">
                <Binding Path="DisplayValue" />
                <Binding Path="UnitSymbol" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</DataTemplate>

这个模板在我的XAML中经常重复出现,只是绑定不同(即DisplayValueUnitSymbol不同)。我想创建一个DataTemplate作为资源,并更改绑定,例如:ItemTemplate="{StaticResource MyUnitTemplate, ValuePath=DisplayValue, UnitPath=UnitSymbol}"。我该怎么做呢?
注意!我意识到我可以创建一个自定义数据类型来保存带单位的值,并为该类型创建模板,但我很好奇是否可以像上面提到的那样使用资源。
1个回答

0
你可以很容易地做到你想要的事情。首先,将你的DataTemplate放在某个资源字典中(或者你可以将它放在Windows或UserControl资源部分)。
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<DataTemplate x:Name="TextBoxStyle">
<TextBlock VerticalAlignment="Center">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:G} {1}">
            <Binding Path="DisplayValue" />
            <Binding Path="UnitSymbol" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

然后,在您的用户控件中,引用资源库。

    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/SialTPChat.UI.Design;component/Styles/ResourceDic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </UserControl.Resources>

现在你可以在这个用户控件的任何地方使用它,还可以将文本框的ItemsSource设置为任何你想要的东西。比如,

   <TextBlock Style="{StaticResource TextBoxStyle}" /> //Set the ItemsSource to anything

也许我没有表达清楚 - 我还想在绑定到DataTemplate时更改Binding - DisplaySymbol和UnitSymbol将因每个用法而异。 - larsmoa
1
啊,我明白了。最好的做法是创建多个数据模板,或者创建一个通用的模型,这样你就不需要更改绑定了。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接