2016-05-03 16 views
1

Mein XAML ist wie unter. Ich habe ein Hauptansichtsmodell, das eine Liste von Elementen hat, und ich möchte in dieser ListeBinding ItemsSteuerelement

<ItemsControl ItemsSource="{Binding MyList}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Label Content="{Binding MyName, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"></Label> 

     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Das Problem eine Eigenschaft anzuzeigen ist, dass MyName ist immer leer, obwohl meine Liste zwei Elemente hat.

Die Haupt VM Klasse hat diese Eigenschaft unten und ich füge hinzu Artikel im Konstruktor

public ObservableCollection<InnerViewModel> MyList { get; set; } 

Meine innere VM

public class InnerViewModel 
{ 
    private string _MyName; 
    public string MyName 
    { 
     get 
     { 
      return _MyName; 
     } 
     set 
     { 
      _MyName = value; 
      OnPropertyChanged("MyName"); 
     } 
    } 

hat ich anstelle OnPropertyChanged tun haben, aber ich bin es nicht einfügen hier zur Vereinfachung. Ich denke, das Problem ist mit dem XAML, aber ich bin mir nicht sicher. Wie kann ich die Eigenschaft MeinName in meiner Liste der Elemente in der Ansicht anzeigen?

Antwort

2

Versuchen Sie, den relativen Quellenteil der Bindung zu entfernen.

<DataTemplate> 
    <Label Content="{Binding MyName}"></Label> 
</DataTemplate> 
+1

, das funktioniert. Danke, aber bitte erklären Sie in zwei Zeilen, warum sollte RelativeSource nicht funktionieren? – user2837961

+1

Wegen des Kontexts. Wenn Sie Datenvorlagen verwenden, ist der Kontext der Bindung ein Element der Liste. –

3

Da Sie MyList als ItemsSource verwenden, wird die Datenquelle für die untergeordneten Elemente MyList sein. Sie müssen also die RelativeSource nicht verwenden.

Mit anderen Worten, sollte diese Arbeit:

<ItemsControl ItemsSource="{Binding MyList}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Label Content="{Binding MyName}"></Label> 

      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl>