2013-04-29 116 views
4

我有一个DataTemplate,我用它来呈现与符号的值看起来是这样的资源:的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}"。我怎样才能做到这一点?

注意!我意识到我可以创建一个自定义数据类型,它包含一个单位值并为此类型创建一个模板,但我很好奇如果可以像上面提到的那样使用资源。

回答

0

你可以做的正是你正在寻找的东西,很容易。首先,把你的DataTemplate放在某个资源字典中(或者你可以把它放在Windows或UserControl Resources部分)。

<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设置为任何您想要的。 IE,

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

也许我还不够清楚 - 我也想改变'Binding's当我绑定到'DataTemplate' - 'DisplaySymbol'和'UnitSymbol'将每次使用之间变化。 – larsmoa 2013-04-29 13:59:16

+1

啊我明白了。最佳做法是创建多个数据模板,或者创建一个通用模型,以便不需要更改绑定。 – Jeff 2013-04-29 14:35:54