2013-04-29 154 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