MVVM wpf-treeview(verbindliche?)
Sorry für die noob Frage. Vielleicht ist dies nicht die Frage - aber ich brauche ein tutorial, Beispiel -/
Ich bin versucht zu schreiben, ein Modell, Aufgabe zu bekommen "handy" mit mvvm-pattern in wpf. Ich bin entscheiden, etwas so zu schreiben Bibliothekar Helfer. Das ist eine einfache wpf-Fenster mit einer combobox(zur Auswahl, wenn das Buch fantasy oder sf), textbox (für die Buch-Namen-Eingang), Taste Hinzufügen, und ein treeview-Baum wie:
Books
------>ScienceFic
----->bookName1
----->bookName2
------->Fantasy
------>bookName3
Und ich habe einige Schwierigkeiten mit Bindung und Trennung view-Modell zu sehen.
Könnten Sie mir helfen?
public enum LibraryType
{
ScienceFic,
Fantasy
}
Class Model: INotifyPropertyChanged
{
private int bookId;
private string bookName;
private LibraryType bookType;
public event PropertyChangedEventHandler PropertyChanged;
//....and for all this fields I have used a INotifyPropertyChanged as
/*
http://stackoverflow.com/questions/1315621/implementing-inotifypropertychanged-does-a-better-way-exist
*/
}
An dieser Stelle das MODELL ist fertig, denke ich.
Nun über ANSICHT:
Ich habe Sie einfach öffnen Sie editor von MainWindow und manuell hinzugefügten button, textbox, combobox und einem treeview.
Nach Zugabe von
comboBox1.ItemsSource = Enum.GetValues(typeof(LibraryType)).Cast<LibraryType>();
comboBox1.SelectedIndex = 0;
Ich initialisiert habe meine combo mit richtigen Arten von Bücher))) Aber((, ich habe das getan in code, nicht in der XAML - ist dieses Recht für MVVM Binden? (erste Frage)
Als Nächstes habe ich binden lassen (wie ich vermute) meine textBox-text in das aktuelle Buch der name-Eigenschaft im ViewModel (ich habe das getan in XAML wie folgt):
<TextBox Text="{Binding Path=CurrentBookName}"/>
ist das richtig? (zweite Frage)
Und schließlich VIEWMODEL
Class ViewModel
{
private string currentBookName;
private LibraryType selectedBookType;
public event PropertyChangedEventHandler PropertyChanged;
//also properties and OnPropertyChanged/SetField functions like in Model class
//and finally I have created two lists for book storing
private List<Model> sfStorage = new List<Model>();
private List<Model> fantasyStorage = new List<Model>();
//and simple getters for this two lists, like:
public List<Model> GetSFStorage
{
get{return this.sfStorage;}
}
//and a simple function for addition of new books
//that I plan to call when AddButton pressed
public void Addition(???)
{
if (!string.IsNullOrEmpty(currentBookName))
{
//? I have add CurrentBookName in XAML of View (see above)
//?but is it enough to have a property of CurrentBookType
//to grant that a valide value from combobox will be here?
var modelNewBook = new Model(CurrentBookName,CurrentBookType);
switch (selectedBookType)
{
case LibraryType.ScienceFic:
sfStorage.Add(modelNewBook);
break;
case LibraryType.Fantasy:
fantasyStorage.Add(modelNewBook);
break;
default:
return;
}
}
}
Jetzt bin ich nur paar Schritt von Erfolg gekrönt ist (sein kann), ABER, wie ich anschließen könnte
ein treeView mit diesen beiden Listen in xaml oder im code Und wie könnte ich nennen, die Neben Funktion
wenn ein Addbutton gedrückt (Dritte und wichtigste Frage)?
Dies ist vielleicht, noob Frage, aber ich wirklich brauchen eine Probe.
Und (vielleicht) diese Frage wird hilfreich sein für andere, die versuchen zu verstehen, MVVM und verbindlich.
InformationsquelleAutor curiousity | 2014-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende code ist ein schnell-hack, der Ihre Anwendung.
Ich habe auch verstanden, dass Sie Probleme mit dem treeview, so dass ich nur die Anzeige des code passanges der treeview und ich fülle meine Bücher Liste im Konstruktor meiner Ansicht Modell, um einige Daten
Modell:
ViewModel:
Anzeigen:
In meinem quick hack ich den Daten-Kontext im Konstruktor der view. Wie: public MainWindow( ) { dieses.InitializeComponent( ); dies.ViewModel = new MainViewModel( ); } public MainViewModel ViewModel { set { this.DataContext = value; } get { return this.DataContext als MainViewModel; } }
InformationsquelleAutor Sukram
Aus, was ich verstehe, Sie benötigen Hilfe bei der Generierung der Hierarchie in
TreeView
mit einemViewModel
. Todo diese werden Sie mit einemHierarchicalDataTemplate
. IhreViewModel
benötigen eine Sammlung von Kinder, und verwenden Sie die einfach zu binden, derItemsSource
Eigenschaft desHierarchicalDataTemplate
zu dieser Sammlung.Werfen Sie einen Blick auf dieses einfache Beispiel jemand gemacht: TreeView und HierarchicalDataTemplate, Schritt-für-Schritt
InformationsquelleAutor deloreyk