2016-05-12 5 views
1

У меня есть пользовательский элемент управления (WaypointInfoControl), что я написал, что имеет свойство зависимостей с именем TheGraphic, как показано здесь:Databinding для ListView элемента в DataTemplate

public Graphic TheGraphic 
{ 
    get { return (Graphic)GetValue(TheGraphicProperty); } 
    set { SetValue(TheGraphicProperty, value); } 
} 

public static readonly DependencyProperty TheGraphicProperty = 
    DependencyProperty.Register("TheGraphic", typeof(Graphic), typeof(WaypointInfoControl), new PropertyMetadata(default(Graphic))); 

У меня есть ViewModel, что имеет свойство Waypoints определяется следующим образом :

private ObservableCollection<Graphic>_Waypoints = new GraphicCollection(); 
public ObservableCollection<Graphic> Waypoints 
{ 
    get { return _Waypoints; } 
    set { RaiseAndSetIfChanged(ref _Waypoints, value); } 
} 

в моем XAML, у меня есть ListView, что я хочу, чтобы заполнить с Waypoints:

<ListView ItemsSource="{Binding Waypoints}" > 
    <ListView.ItemTemplate > 
     <DataTemplate > 
      <controld:WaypointInfoControl TheGraphic="????" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Как привязать TheGraphic к отдельному элементу в ListView, который он представляет?

ответ

3

Ваш ItemsSource привязан к коллекции Graphic объектов, что означает, что DataContext для каждого элемента в вашем ListView будет одного Graphic объекта. Поскольку DependencyProperty, к которому вы хотите привязать, ищет объект Graphic, вы просто хотите привязать его ко всему DataContext, вы достигаете этого, используя расширение разметки привязки без указания пути (это просто заставляет привязку втягивать весь DataContext, который в вашем случае является объектом Graphic, который вы ищете).

Так это должно работать:

<ListView ItemsSource="{Binding Waypoints}" > 
     <ListView.ItemTemplate > 
      <DataTemplate > 
       <controld:WaypointInfoControl TheGraphic="{Binding}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView>