2012-03-03 48 views
0

我使用幾個數據模板來顯示不同的值,這些數據模板由DataTemplateSelector選擇。每個控件都有一些DataBinding用於我的自定義對象。對象是ObservableCollection的一部分,然後DTS爲它們選擇模板。問題是:當我嘗試使用一些預先定義的對象(在代碼中)運行我的應用程序時,所選控件沒有值。例如:TemplateSelector中的DataBinding

<!--Date Template--> 
    <DataTemplate x:Key="DateTemplate"> 
     <WrapPanel x:Name="DateTemplate_Panel"> 
      <WrapPanel.DataContext> 
       <params:FTParams /> 
      </WrapPanel.DataContext> 
      <Label x:Name="DateTemplate_Label" Content="{Binding Path=Name}" /> 
      <DatePicker x:Name="DateTemplate_DatePicker" SelectedDate="{Binding Path=SelectedValue}" SelectedDateFormat="Long" /> 
     </WrapPanel> 
    </DataTemplate> 

控制,只有當我改變自己的價值(INotifyPropertyChanged實現)

如果我設置

<Label Content="{Binding Path=SelectedValue}"/> 

,我選擇然後將內容是否正確裝入DataPicker日期正在響應。但我真的需要在啓動時加載這個值。 你能給我一些建議嗎?

+0

你能提供一個ObservableCollection中這個綁定的類的例子嗎? – kaj 2012-03-03 08:19:02

回答

2

數據模板不應該包含嵌入數據。而且你絕對不想在DT內實例化FTParams的實例。 DataTemplate的DataContext屬性是隱式設置的,當您在樹中的其他位置有數據時。

我假設你有某種ItemsControl的,但爲簡單起見,讓下面的示例有內容控制:

<ContentControl ContentTemplate="{StaticResource DateTemplate}"> 
    <params:FTParams /> 
</contentControl> 

如果你曾在ItemsControl中的所有項目(所用的ItemsSource綁定到的ObservableCollection) ,那麼應該設置ItemsTemplate而不是ContentTemplate,或者如果您想使用模板選擇器,請設置ItemTemplateSelector。

<ItemsControl ItemsSource="{Binding PathToTheObsCollectionProperty}" 
    ItemTemplateSelector="{StaticResource MySelector}" /> 

在所有情況下,DT不應該明確設置DataContext屬性。

然後讓你的數據模板沒有DataContext元素。

+0

我已經從模板中刪除了DataContext,它工作正常。感謝您的回答。 – arche89 2012-03-03 09:15:15