2011-07-20 64 views
0

我有一個ItemsCountrol和它的ItemsSource屬性綁定到一個ObservableCollection。我有一個顯示此類型的用戶控件(TeamUserControl)。我創建了一個datatemplate,用於爲itemssource集合中的每個自定義類型項加載此用戶控件。此時,我在TeamUserControl中創建的任何綁定語句都可以直接通過路徑{Binding Path = TeamOwner}引用Team屬性並工作。有沒有辦法將一個引用綁定到用戶控件所代表的ItemsSource項目上?例如,在TeamUserControl中創建類型爲Team的依賴屬性,並將其綁定到來自ItemsSource的項目實例。將DataTemplate控件屬性綁定到ItemsSource集合中的項目上?

<ItemsControl Name="ItemCtrl" Grid.Row="0" ItemsSource="{Binding Path=League.Teams}"> 
     <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <mycontrols:TeamUserControl AttachedTeam="{Binding ???}" TeamOwnerName="{Binding Path=TeamOwner}"/> 
     </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

在這個例子中該窗口代表其具有屬性的類「聯賽」: 的ObservableCollection小組。還有一個班級「團隊」,它有屬性:TeamOwner。 TeamUserControl有兩個依賴屬性:Team類型的AttachedTeam和類型爲string的TeamOwnerName。

我包含團隊所有者屬性引用以顯示每個這些用戶控件都有一個Team實例。我只是不確定如何引用它。

回答

4

據我瞭解你,你應該寫

<mycontrols:TeamUserControl AttachedTeam="{Binding}" TeamOwnerName="{Binding Path=TeamOwner}"/> 

{Binding}語句將綁定到當前項目中的ItemsSource,其中type T是類型的您ObservableCollection<T> League.Teams用途。

我還建議您閱讀MSDN關於ItemsControl的文章,並環顧Binding,以明確自己,可以綁定什麼。

+0

這是我認爲它應該工作。但是,我在嘗試在源類型的TeamUserControl和目標類型Team之間進行轉換時遇到了綁定錯誤。自從ItemsSource是OC 以來,該錯誤讓我完全困惑。退後一步,如果我沒有定義ItemsControl.ItemsTemplate,我只需要一個類名「Team」。我想告訴它每個類Team對象,使用這個TeamUserControl usercontrol。 – mminneman

+1

是的,你是對的。事實證明,在我的TeamUserControl中,我(爲了調試)將DataContext設置爲(DataContext =「{Binding RelativeSource = {RelativeSource Mode = Self}}」),它保持我所有的窗口綁定語句按預期工作。我刪除了,一切都很好。謝謝。 – mminneman

+0

@mminneman por青睞! – stukselbax

相關問題