Dieses Beispiel ist zugegebenermaßen ein wenig konstruiert, aber ich mache etwas Ähnliches. Nehmen wir an, ich habe die folgenden einfachen Klassen:
public class Person
{
public string Name { get; set; }
public List<Alias> Aliases { get; set; }
}
public class Alias
{
public string AliasName { get; set; }
}
Und nehmen wir an, dass ich Xaml mit einem LayoutRoot-Gitter und einem DataGrid habe, wo ich auf die Eigenschaft Name innerhalb des DataGrid zugreifen möchte stattdessen der Aliaseigenschaften wie in der zweiten Spalte hier:
<Grid x:Name="LayoutRoot" DataContext="PersonInstance">
<DataGrid ItemsSource="{Binding Aliases}">
<DataGrid.Columns>
<data:DataGridTextColumn Header="AliasName" Binding="{Binding AliasName, Mode=TwoWay}"/>
<data:DataGridTextColumn Header="Name" Binding="{Binding ../Name, Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
So würde ich intuitiv versuchen, den Namen zu binden, aber das sieht natürlich blöd aus. Gibt es so etwas, wenn Sie einen Pfad angeben, oder sind Sie gezwungen, eine relative Quelle bis zum LayoutRoot-Datenkontext zu erhalten. Wenn man das muss, was ist dann der effizienteste Weg?
0 Stimmen
Warum funktioniert das nicht?
Binding="{Binding Name, Mode=TwoWay}"
0 Stimmen
@Veer, weil es in der Klasse Alias keine Eigenschaft Name gibt...
0 Stimmen
@Anvaka: Aber der Datentext wird auf die Instanz der Personenklasse gesetzt. Er sollte die Eigenschaft Name kennen.
0 Stimmen
@Veer: Oh, Sie haben recht! Habe es übersehen. Aber wir verwenden Aliase als ItemsSource, bedeutet das nicht, dass wir Alias im DataContext der Zeile haben werden? Selbst wenn das nicht der Fall ist, wird AliasName nicht funktionieren...