Autor |
Beitrag |
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Fr 02.09.16 12:11
Hallo Entwicklergemeinde,
Ich habe eine Problem.
Entweder macht gerade mein Gehirn schlapp oder ich habe das noch nicht richtig verstanden.
Ich habe vor eine WPF Anwendung zu erstellen die auf der Linken Seite ein Menü zum Bedienen der Hauptanzeige, diese soll sich rechts daneben befinden.
Das Problem ist, ich habe verschieden Views und die Verschiedenen ViewModels, wie bekomme ich die nun Gebunden an die Einzelnen Menüpunkte und wie erreiche ich, dass die Anzeig dann auch nur den angeklickten Punkt bzw. das Passende Usercontroll anzeigt?
Ich habe leider nichts passendes gefunden.
Vielleicht kennt jemand ein Tutorial.
Danke schon mal für die Hilfe.
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 02.09.16 12:30
Hallo,
such mal mit dem Begriff "Navigation" danach.
Falls du schon mal mit Prism gearbeitet hast: Navigation Using the Prism Library for WPF.
Für diesen Beitrag haben gedankt: m.keller
|
|
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Mo 05.09.16 10:06
Nein noch nicht.
Ich will das auch erst ein mal nicht anfassen, weil ich das ganze Prinzip erst ein mal verstehen möchte.
Zum vereinfachen später von anderen Projekten greife ich dann vielleicht darauf zurück.
Danke aber schon mal.
Ich habe das jetzt Zwar so weit aufgebaut wie in
rachel53461.wordpres...igation-with-mvvm-2/
Allerdings komme ich nicht dazu, dass er die Seite Wechselt.
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 05.09.16 11:11
Du musst noch SelectedItem an CurrentPageViewModel binden
XML-Daten 1:
| SelectedItem="{Binding Path=CurrentPageViewModel, Mode=TwoWay}" |
Das fehlt in dem Beispiel
Moderiert von Th69: XML-Tags hinzugefügt
|
|
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Mo 05.09.16 11:22
Palladin007 hat folgendes geschrieben : | Du musst noch SelectedItem an CurrentPageViewModel binden
SelectedItem="{Binding Path=CurrentPageViewModel, Mode=TwoWay}">
Das fehlt in dem Beispiel |
Ok Danke, gibt es den überhaut eine Möglichkeit bei ItemsControl diese Option zu nutzen?
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 05.09.16 11:26
Klar, warum sollte das nicht gehen?
|
|
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Mo 05.09.16 11:32
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 05.09.16 11:34
Ist eine Property vom ItemsControl, also beim ItemsControl
Blödsinn, die Klasse Selector hat die SelectedItem-Property. Für Auflistungen, in denen ein Item ausgewählt werden kann, kann also ListView oder ListBox verwendet werden.
Zuletzt bearbeitet von Palladin007 am Mo 05.09.16 11:47, insgesamt 1-mal bearbeitet
|
|
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Mo 05.09.16 11:39
Kann ich dort nicht finden.
Und wenn ich es hinzufüge kann er es nicht Kompilieren.
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|
Th69
Beiträge: 4777
Erhaltene Danke: 1054
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 05.09.16 11:43
Dann zeige uns deinen Code und die Fehlermeldung des Compilers.
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 05.09.16 11:46
Stimmt, ich hab mich geirrt
SelectedItem gehört zu der Klasse Selector und die erbt von ItemsControl.
Probier mal ListView oder ListBox. ListView erbt von ListBox und die erbt von Selector, hat also auch die SelectedItem-Property
Aus dem Kopf weiß ich den Unterschied nicht mehr, aber es kann sein, dass Du explizit den Border abstellen musst.
PS:
Es gibt die Properties SelectedItem, SelectedValuePath und SelectedValue, den Unterschied kannst Du hier nachlesen.
|
|
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Mo 05.09.16 12:19
Danke da habe ich die Property.
Ich habe den Fehler gefunden.
Weiß aber nicht woran es genau liegt.
In dem Beispielt ist der Command so angegeben
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public ICommand ChangePageCommand { get { if (_changePageCommand == null) { _changePageCommand = new RelayCommand( p => ChangeViewModel((IPageViewModel)p), p => p is IPageViewModel); } return _changePageCommand; } } |
Ich habe mir eine Class erstellt die das ICommand erbt.
Und diese als Commandtyp verwendet.
Im Konstruktor habe ich dann diesen mit der Methode zugewiesen.
Konstruktor
C#-Quelltext 1: 2: 3: 4: 5:
| ChangeViewRelay = new RelayCommand(p => ChangeViewModel((ViewModelBase)p), true);
} |
Der Command
C#-Quelltext 1: 2: 3: 4: 5:
| public RelayCommand ChangeView { get; set; } |
Die Methode
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| private void ChangeViewModel(ViewModelBase viewModel) { if (!Views.Contains(viewModel)) { Views.Add(viewModel); } CurrentPageView = Views.FirstOrDefault(vm => vm == viewModel); } |
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 05.09.16 12:30
Wenn ich mich nicht irre, brauchst Du die Property garnicht selber setzen, das macht der Selector von sich aus.
Wenn der Benutzer in der UI auf eines der Items klickt und das dadurch ausgewäjlt wird, dann landet es in der SelectedItem-Property und (wenn das Binding TwoWay ist) auch in deiner Property im ViewModel.
Für diesen Beitrag haben gedankt: m.keller
|
|
m.keller
Beiträge: 133
Win xp, Win 7
C# (VS 2008)
|
Verfasst: Mo 05.09.16 12:53
es geht scheibar beides.
vielen Dank
_________________ Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
|
|