Установить привязку свойства элемента управления DataTemplate к элементу из коллекции ItemsSource? - PullRequest
0 голосов
/ 20 июля 2011

У меня есть ItemsCountrol со свойством ItemsSource, связанным с ObservableCollection. У меня есть usercontrol (TeamUserControl), который отображает этот тип. Я создал шаблон данных, который загружает этот пользовательский элемент управления для каждого элемента нестандартного типа в коллекции источника элементов. На этом этапе любые операторы Binding, которые я делаю внутри TeamUserControl, могут ссылаться на свойства Team напрямую по пути {Binding Path = TeamOwner} и работать. Есть ли способ привязать ссылку к элементу ItemsSource, который представляет usercontrol? Например, в TeamUserControl создайте свойство зависимости типа Team и привяжите его к экземпляру элемента из 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 Team. И есть класс «Команда», который имеет свойство: TeamOwner. TeamUserControl имеет два свойства зависимости: AttachedTeam типа Team и TeamOwnerName типа string.

Я включил ссылку на свойство Team-Owner, чтобы показать, что для каждого из этих пользовательских элементов управления существует экземпляр Team. Я просто не знаю, как на это ссылаться.

1 Ответ

5 голосов
/ 21 июля 2011

Как я понимаю, вам следует написать

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

{Binding} оператор будет привязан к текущему элементу в ItemsSource, где тип T - это тип, который используется вашим ObservableCollection<T> League.Teams.

Я также рекомендую вам прочитать MSDN статью о ItemsControl и осмотреть Binding, чтобы понять, что вы можете связать.

...