MVVM-Befehl Ausführen auf ViewModel aus anderen ViewModel

Ich beschäftige mich nun seit 14 Tagen nun auch mit einer einfachen Aufgabe: In der Datenbank habe ich die Definitionen für die hardware-Kategorien. Zum Beispiel :

  1. HDD
    • Internen
    • Externe
    • Flash

Diese Liste ist in der Datenbank wie folgt definiert:

    [ID - ParrentID - Name] : 1 - 0 - HDD, 2 - 1 - Internal, 3 - 1 - External, 4 - 1 - Flash.        

Durch Entity Framework bekomme ich diese Zeilen in meine Anwendung. Von dieser Wohnung aus Daten, die ich dann erstellen Sie strukturierte Objekt, das ist mein DataModel. Dieses Modell ist wie folgt definiert :

public class Category
{
   private int _id = -1;
   private string _name = "";
   private List<Category> _subCategories = null;
//property getters and setters, constructors, and bool HasSubCategories
}  

Nun, aus diesen Erzeuge ich ViewModel genannt SubCategoryViewModel, um die gebundenen mein TreeView. Also, ich kann meine Kategorien in einer Baumansicht und mit meiner Definition und gepflegt Hierarchie. Das funktioniert ganz gut. In SubCategoryViewModel definiert ist, Befehl durch Befestigt Verhalten für MouseDoubleClick das ist auch gebunden an TreeView. So, wenn der Benutzer doppelt klickt auf den Artikel, in SubViewCategoryModel definierte Methode ausgeführt wird, insbesondere-code. Liste der SubCategoryViewModel geschachtelt ist in HWDocumentViewModel das ist eine Haupt-ViewModel für meine Fenster.
Was ich jetzt brauchen, ist offensichtlich : Wenn der Benutzer Doppelklick auf Eintrag in TreeView, ich brauche zu laden, Elemente aus der Datenbank und zeigen Sie Sie in die Listenansicht. Meine Meinung ist, dass in HWDocumentViewModel ich brauche, um zu definieren, eine Sammlung von Artikel und laden Sie Sie entsprechend der ausgewählten Kategorie in der Listenansicht angezeigt werden. Aber, ich weiß nicht, wie das ausführen einer Methode auf HWDocumentViewModel von SubCategoryViewModel. Denn : TreeView gebunden, um die Liste der SubCategoryViewModel Elemente, so dass, wenn DoubleClick Auftritt, wird die Methode auf SubCategoryViewModel ausgeführt wird. Ich bin auf der Suche nach einem Weg, wie das ausführen einer Methode auf Haupt-ViewModel (HWDocumentViewModel).

Habe ich versucht diesen Ansatz :

Ich erstellte eine Eigenschaft : public static SubCategoryViewModel SelectedCategory auf HWDocumentViewModel. Wenn doubleclick Auftritt, habe ich diese Eigenschaft von SubCategoryViewModel als this. So, in dieser Eigenschaft ist ein Objekt, das ausgeführt doubleclick-Ereignis zu delegieren. Toll, jetzt habe ich in HWDocumentView Modell ein Objekt, das der Benutzer ausgewählt ist.

Also, ich brauche zu laden Elemente zur ListView. Aber, ich laden Sie Sie von der Methode in SubCategoryViewModel ? Ich denke nicht so. Stattdessen sollte ich laden Sie Sie von der Main View-Modell durch die Schaffung eines ViewModel für Sie und binden Sie es an ListView, richtig ? Aber, wie kann ich aus SubCategoryViewModel Aufruf einer Methode in HWDocumentViewModel ? Soll ich schreiben Sie eine statische Methode
auf einem HWDocumentViewModel, die zugänglich sein wird, von SubCategoryViewModel ?

Oder gibt es einen Weg, wie call-Befehl definiert HWDocumentViewModel von SubCategoryViewModel ?

Oder allgemein, habe ich einen richtigen Ansatz zu schaffen, ein Lager-wie-Anwendung in WPF ?

Vielen Dank.

EDIT: XAML-Code für mein TreeView sieht wie folgt aus :

<TreeView x:Name="tvCategories" Background="White" ItemsSource="{Binding Categories}">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="{x:Type TreeViewItem}">
                            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                            <Setter Property="FontWeight" Value="Normal" />
                            <Setter Property="behaviors:MouseDoubleClick.Command"  Value="{Binding MouseDoubleClickCommand}" />
                            <Setter Property="behaviors:MouseDoubleClick.CommandParameter" Value="{Binding}" />
                            <Style.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="FontWeight" Value="Bold" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.Resources>
                        <HierarchicalDataTemplate DataType="{x:Type localvm:SubCategoryViewModel}" ItemsSource="{Binding Children}">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding CategoryName}" />
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.Resources>

                </TreeView>
Können Sie fügen Sie das treeview-xaml-bitte. Ihre Frage gibt mir Zut Verwirrung über die Frage,

InformationsquelleAutor sinkien | 2012-04-08

Schreibe einen Kommentar