Установить привязку свойства элемента управления DataTemplate к элементу из коллекции ItemsSource?

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

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


person mminneman    schedule 20.07.2011    source источник


Ответы (1)


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

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

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

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

person stukselbax    schedule 21.07.2011
comment
Вот как я думал, что это должно работать. Однако я получаю ошибки привязки, когда он пытается выполнить преобразование между исходным типом TeamUserControl и целевым типом Team. Эта ошибка меня полностью сбила с толку, поскольку ItemsSource является OC ‹Team›. Отступая назад, если я не определяю ItemsControl.ItemsTemplate, я просто получаю имя класса Team. Я пытаюсь сказать это для каждого объекта класса Team, используйте этот пользовательский элемент управления TeamUserControl. - person mminneman; 21.07.2011
comment
Да, ты был прав. Оказывается, в моем TeamUserControl я (для отладки) установил для DataContext значение (DataContext = {Binding RelativeSource = {RelativeSource Mode = Self}}), что сохраняло все мои операторы привязки Window для работы, как ожидалось. Я удалил это, и все в порядке. Спасибо. - person mminneman; 21.07.2011