Laden...

MVVM Wechsel zwischen Views

Letzter Beitrag vor einem Jahr 4 Posts 394 Views
MVVM Wechsel zwischen Views

Hallo ihr lieben,

ich hätte da eine Frage. Ich hoffe ihr könnt mir da weiterhelfen.

Ich möchte zwischen zwei Views wechseln. Diese sind in ContentControls eingebettet über

<ContentControl Content="{Binding SelectedViewModel}" />

SelectedViewModel ist deklariert in meiner BaseViewModel:

        private BaseViewModel selectedViewModel;

        public BaseViewModel SelectedViewModel
        {
            get { return selectedViewModel; }
            set 
            { 
                selectedViewModel = value;
                OnPropertyChanged();
            }
        }

Durch einen Button, welcher in einer der Views ist, möchte ich die View selbst ändern. Leider passiert gar nichts 😦

Der ChangeCommand sieht so aus:

    public class ChangeCommand : ICommand
    {
        public event EventHandler CanExecuteChanged;
        public LoginVM ViewModel;
        public ChangeCommand(LoginVM vm)
        {
            ViewModel = vm;
        }
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            ViewModel.LogIn();
        }
    }

Damit wird dann LogIn() ausgeführt, bei welchem die SelectedViewModel geändert wird auf die andere View.

        public void LogIn()
        {
            SelectedViewModel = new OtherVM();
        }

Wenn ich Debugge, wird die Variable auch gesetzt korrekt, aber das Binding funktioniert anscheinend nicht korrekt. Oder warum wird die View nicht geändert?

Im Anhang ist das komplette Projekt.

Du setzt das SelectedViewModel in deiner LoginVM und nicht in der BasicWindowVM.

Ah stimmt, da das zwei Objekte sind, sind es auch getrennte Variablen kann man sagen, richtig? Wie kann man das am besten lösen?

Wie löst man das, wenn man dem Peter erzählt er soll doch bitte das Geld einstecken und dann mit dem Herbert zum Essen fährt und nicht bezahlen kann?

Nimm den zum Essen mit, der das Geld eingesteckt hat, wenn du ernsthaft bezahlen möchtest.

Mit den Objekten und Instanzen verhält es sich genauso. Obwohl Peter und Herbert beide vom Typ Mensch sind unterscheiden sich die Instanzen eben dadurch das die Instanz Peter das Geld hat und die Instanz Herbert eben nicht.

public class Mensch
{
    public decimal Geld { get; set; }
}

var peter = new Mensch();
peter.Geld += 100;
var herbert = new Mensch();

Hat die Blume einen Knick, war der Schmetterling zu dick.