Ich habe eine DataGrid
gebunden an eine List<Coefficients>
im Speicher. Die Coefficients
Klasse hat eine string Name
als ID, und viele andere Felder (einige Namen und identifizierende Details wurden geändert, um die Privatsphäre des Codes zu schützen). Der DataGrid
Code ist wie folgt:Datagrid-Combobox-Spalte mit Werten aus einer anderen Spalte im selben Datagrid
<DataGrid
Name="coefficientList"
ItemsSource="{Binding Data.CoefficientList, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Name, Mode=TwoWay}" />
<DataGridTextColumn Binding="{Binding Path=Priority, Mode=TwoWay}" />
...
</DataGrid.Columns>
</DataGrid>
Nun werden die Elemente in der Datagrid müssen ein anderes Element in der gleichen Sammlung verweisen, so habe ich ein neues Feld in der Coefficients
Klasse: string ReferencedName
. Dies ist die Zeichenfolge-ID des referenzierten Elements in der Auflistung. Ich möchte also eine neue Spalte im Datagrid haben, um den Wert des referenzierten Elements über eine Combobox auszuwählen, und diese Combobox muss mit der Name
-Spalte desselben Datagrids gefüllt werden.
Wie kann ich das erreichen? Bisher habe ich versucht, so etwas wie:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
SelectedValue="{Binding ReferencedName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},
Path=Data.NameList, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
wo NameList
ist
public IEnumerable<string> NameList
{
get
{
return CoefficientList.Select(c => c.Name);
}
}
aber alles, was ich habe versucht, gibt bisher immer eine Combobox ohne Optionen und Fehler im Ausgabefenster wie
System.Windows.Data Error: 40 : BindingExpression path error: 'Data' property not found on 'object' ''DataGrid' (Name='coefficientList')'. BindingExpression:Path=Data.NameList; DataItem='DataGrid' (Name='coefficientList'); target element is 'ComboBox' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')
Kann mir jemand in die richtige Richtung zeigen?
So einfach und doch so schwer zu fassen! Vielen Dank! – Charlie
Ja, oft vergessen Sie es selbst, wenn Sie 'RelativeSource' verwenden – ASh