Laden...

[gelöst] DataGridTemplateColumn - ComboBox - ItemsSource

Erstellt von userid4106 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.487 Views
U
userid4106 Themenstarter:in
457 Beiträge seit 2006
vor 12 Jahren
[gelöst] DataGridTemplateColumn - ComboBox - ItemsSource

Hallo,

ich habe ein Anwendung die auf MVVM aufbaut. EntityFramework ist ebenfalls im Einsatz.
Nun habe ich ein DataGrid und in einer Column habe ich eine ComboBox. Dem Datagrid gebe ich als Tabelle eine Entitiy mit. Praktischerweise kann ich dann ja über Eigenschaften der Entity an die Tabellen kommen, die mit Fremdnschlüsseln verbunden sind. Nun möchte ich logischerweise der ComboBox als ItemsSource den Inhalt einer Verknüpften Tabelle mitgeben. Dazu mache ich einmal den hier:


        <Plan_ViewModel:Vm x:Key="StaticViewModel" />

und dann den hier:


                            <DataGridTemplateColumn Header="Maschine"
                                                    SortMemberPath="MASCHINEID">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <ComboBox x:Name="ComboBoxMaschine"
                                                  DisplayMemberPath="KENNZEICHEN"
                                                  IsEditable="True"
                                                  ItemsSource="{Binding Context.MASCHINE,
                                                                        Source={StaticResource StaticViewModel}"
                                                  SelectedValue="{Binding MASCHINEID,
                                                                          Mode=TwoWay,
                                                                          UpdateSourceTrigger=PropertyChanged}"
                                                  SelectedValuePath="ID" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>

Klappt soweit auch ganz gut ABER... ist es nicht leicht verrückt zwei mal das ViewModel zu instanzieren?! Immerhin wird ja ein Haufen an Logik ausgeführt. Ich will also weg davon. Wie könnte man das am besten lösen?? Am liebsten wäre es mir ja, wenn ich direkt in mein VM verweisen könnte. Aber da habe ich schon so einiges mit FindAncestor usw. ausprobiert aber nichts daon hat funktioniert:-(

Wie müsste das ItemsSource Binding sauber aussehen, wenn der EF ObjectContext direkt im VM liegt?

5.299 Beiträge seit 2008
vor 12 Jahren

... ist es nicht leicht verrückt zwei mal das ViewModel zu instanzieren?! Da sag ich nicht nein 😉

Ich glaub, "ViewModel-Locator-Pattern" heißt ein abenteuerliches Konstrukt, bei dem man eine neue Klasse schafft, mit einer Property, die das eigentliche Viewmodel zurückgibt.
Der Getter dieser Property greift auf eine lokale static - Viewmodel-Variable zu - die einzige Instanz des Viewmodels, die's geben darf.

Der frühe Apfel fängt den Wurm.

U
userid4106 Themenstarter:in
457 Beiträge seit 2006
vor 12 Jahren

Also ich habe das jetzt ein bisschen Microsoft-like gelöst;-)
Es gibt, wenn man Expression Blend installiert hat, eine Demo namens "Contacts".
Die haben einfach das ViewModel in die App.xaml gepackt


<Contacts_ViewModels:ContactsViewModel x:Key="ContactsViewModelDataSource" d:IsDataSource="True"/>

und im MainWindow


DataContext="{Binding Source={StaticResource ContactsViewModelDataSource}}"

das ganze so eingebunden. Man hat also nur ein VM und die ComboBoxen in einer DataGridTemplateColumn können wieder an eine StaticResource binden