2009-02-18 37 views
14

我正在嘗試使用DataTemplate顯示單個項目(不包含在集合中)。這是迄今爲止我所得到的,沒有任何顯示。替換ItemsControlListBox顯示一個空的列表框(所以我知道元素在那裏)。如何在Silverlight中使用DataTemplate顯示單個項目?

 <ItemsControl 
      ItemsSource="{Binding Session}" 
      ItemTemplate="{StaticResource SessionHeaderDataTemplate}" 
      /> 

Session是一個單一的對象。我想使用DataTemplate,因爲我在應用程序的其他地方顯示了相同的信息,並且希望將展示樣式定義爲資源,以便我可以在一個位置更新它。

任何想法,或者我應該創建一個1元素集合在我的ViewModel並綁定到該?

編輯:這是我最終做的,雖然下面的答案也是一個解決方案。我很喜歡我的DataTemplates,所以不喜歡這樣的東西推出到另一個XAML文件。

XAML:

 <ItemsControl 
      DataContext="{Binding}" 
      ItemsSource="{Binding Session_ListSource}" 
      ItemTemplate="{StaticResource SessionHeaderDataTemplate}" /> 

視圖模型:

private Session m_Session; 
    public Session Session 
    { 
     get { return m_Session; } 
     set 
     { 
      if (m_Session != value) 
      { 
       m_Session = value; 
       OnPropertyChanged("Session"); 

       // Added these two lines 
       Session_ListSource.Clear(); 
       Session_ListSource.Add(this.Session); 
      } 
     } 
    } 

    // Added this property. 
    private ObservableCollection<Session> m_Session_ListSource = new ObservableCollection<Session>(); 
    public ObservableCollection<Session> Session_ListSource 
    { 
     get { return m_Session_ListSource; } 
     set 
     { 
      if (m_Session_ListSource != value) 
      { 
       m_Session_ListSource = value; 
       OnPropertyChanged("Session_ListSource"); 
      } 
     } 
    } 

回答

29

堅持與您的數據模板的簡單意見,沒有代碼背後,而不必創建另一個用戶控件。使用ContentControl爲單個項目顯示您的DataTemplate。

<ContentControl 
     ContentTemplate="{StaticResource SessionHeaderDataTemplate}" 
     Content="{Binding Path=Session}" /> 
+2

正是我以後的樣子! – geofftnz 2009-07-21 21:55:43

1

你並不需要使用一個ItemsControl要做到這一點,只需要創建一個自定義用戶控件,然後綁定到,例如

<TestProject:myControl DataContext="{Binding Session}" /> 

自定義控件可以擁有它自己的xaml文件,所以它可以看起來是你想要的。

+0

我要紀念這個作爲回答,因爲它是一個可行的解決方案,但我最終作出一個1-元素集合綁定到,因爲我喜歡保持我所有的可重複使用的數據模板在一個地方。 – geofftnz 2009-02-19 02:16:19

相關問題