WPF DataGridTemplateColumn mit ComboBox-Binding - (MVVM-pattern)

Werde ich verrückt mit den folgenden WPF-DataGrid+ComboBox-Szenario.

Habe ich eine Reihe von Klassen, die so Aussehen;

class Owner
{
    int ID { get; }
    string Name { get; }

    public override ToString()
    { 
        return this.Name;
    }
}

class House
{
    int ID { get; }
    Owner HouseOwner { get; set; }
}

class ViewModel
{
    ObservableCollection<Owner> Owners;
    ObservableCollection<House> Houses
}

Nun meine gewünschte Ergebnis ist ein DataGrid, die zeigt eine Liste der Zeilen des Typs Haus, und in einer der Spalten, ist ein Auswahlfeld, in das der Benutzer ändern Sie den Wert von Haus.Vermieter.

In diesem Szenario wird der DataContext für das raster ist ViewModel.Häuser und für die ComboBox, ich will, dass die ItemsSource gebunden zu sein, zum ViewModel.Besitzer.

Ist das überhaupt möglich? Ich werde mental mit diesem... die besten, die ich in der Lage gewesen zu tun ist, um richtig zu Holen die ItemsSource gebunden, aber das Kombinationsfeld (in einem DataGridTemplateColumn) zeigt nicht die richtigen Werte für das Haus.Vermieter in jeder Zeile.

HINWEIS: Wenn ich die ComboBox aus dem Bild heraus und setzen Sie einen TextBlock in der DataTemplate statt, ich kann richtig sehen, wie die Werte für jede Zeile, die aber immer sowohl eine ItemsSource-als auch den richtigen Wert bei der Auswahl ist nicht für mich arbeiten...

In meinem code, ich habe den DataContext auf das Fenster zu ViewModel und auf dem Gitter, den DataContext gesetzt ist ViewModel.Häuser. Für alles außer dieses Kombinationsfeld, das es funktioniert...

Meiner XAML-Code für die problematische Spalte aussieht;

<DataGridTemplateColumn Header="HouseOwner">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Path=DataContext.Owners, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                        DisplayMemberPath="Name"
                        SelectedItem="{Binding HouseOwner, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                        SelectedValue="{Binding HouseOwner.ID, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Mode=OneWay}"
                        SelectedValuePath="ID" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Würde gerne etwas Hilfe dabei... scheint wie ein bisschen Voodoo ist erforderlich, wenn...

InformationsquelleAutor RJ Lohan | 2011-08-17

Schreibe einen Kommentar