2013-04-30 1 views
0

Я пытаюсь использовать UserControl как DataTemplate в ItemsControl. UserControl называется WorkItemControl, а объекты в ObservableCollection, связанные с ItemsSourceItemsControl, имеют тип WorkItemModel.UserControl как DataTemplate в ItemsControl

я получаю следующее сообщение об ошибке при включении связывания диагностики

BindingExpression ошибка путь:

'ItemModelText' property not found on 'object' ''WorkItemControl' (Name='')'. 
BindingExpression:Path=ItemModelText; DataItem='WorkItemControl' (Name=''); 
target element is 'WorkItemControl' (Name=''); target property is 'ItemText' (type 'String') 

Он отлично работает, если вместо О.Г. UserControl, кнопка используется как DataTemplate.`

Следующий фрагмент XAML показывает ItemsControl.

<Border Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" BorderThickness="0" BorderBrush="Black"> 
     <ItemsControl Name="WorkItems" ItemsSource="{Binding Path=WorkItemModels}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <control:WorkItemControl ItemText="{Binding Path=ItemModelText}"/> 
        <!--<Button Content="{Binding Path=ItemModelText}"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Border> 

Любые идеи, почему это не будет работать с UserControl?

+0

Возможно, вы сами установили DataContext для WorkItemControl. Затем привязка в DataTemplate попытается найти свойство ItemModelText' для элемента управления, а не элемента данных. Поэтому не устанавливайте DataContext для WorkItemControl, если вы хотите использовать его в DataTemplate. – Clemens

ответ

0

Я не уверен, что могу написать то, что думаю ... Для использования свойств UserControl в XAML UserControl вам нужно RelativeSource = Self, но этот же RelativeSource мешает вам при попытке связать свойства за пределами. Я столкнулся с той же проблемой. Мне удалось решить эту проблему, установив источник внешней привязки, но я думаю, что это не слишком изящный способ. На самом деле, я думаю, что это проблема дизайна в WPF, поскольку (по моему мнению) RelativeSource внутри UserControl не должен влиять на привязку за пределами от него (но это так). Если вы решили, что это лучше, сообщите мне. Благодарю.

+1

... и я нашел решение Извлеките RelativeSource из UserControl и добавьте его в свою дочернюю сетку, но не с параметром «Self», вместо этого следующим образом: YaniMan