myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » DataContext in ViewModel A von ViewModel B aus ändern?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

DataContext in ViewModel A von ViewModel B aus ändern?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
GCPS
myCSharp.de-Mitglied

Dabei seit: 16.09.2020
Beiträge: 1


GCPS ist offline

DataContext in ViewModel A von ViewModel B aus ändern?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich versuche mich gerade daran, meine erste Applikation im MVVM Design-Pattern zu entwickeln. Dabei besteht die MainWindow.xaml aus einem einzigen ContentControl, welches an die CurrentView des MainWindowViewModel.cs gebunden ist. Im Konstruktor erstelle ich dann eine Instanz des MainViewModels und setze diese als CurrentView, um so die MainView als Content für die ContentControl zu bekommen. Jetzt würde ich gerne aus der MainViewModel, die CurrentView in der MainWindowViewModel setzen, um so den Content für die ContentControl zu ändern. Jetzt ist es mir jedoch ein Rätsel, wie ich aus dem MainViewModel auf die CurrentView des MainWindowViewModel zugreifen kann.
Ich habe dazu mal den nachfolgenden Code angefügt, ich hoffe dies verdeutlicht es etwas.

MainWindow.xaml

XML-Code:
    <Window.DataContext>
        <vm:MainWindowViewModel/>
    </Window.DataContext>
    <Grid>
        <ContentControl Content="{Binding CurrentView}"></ContentControl>
    </Grid>

App.xaml

XML-Code:
            <DataTemplate DataType="{x:Type vm:MainViewModel}">
                <view:Main/>
            </DataTemplate>

MainWindowViewModel.cs

C#-Code:
public class MainWindowViewModel : ObservableObject
    {
        public MainWindowViewModel()
        {
            MainVM = new MainViewModel(DialogCoordinator.Instance);
            CurrentView = MainVM;
        }

        private object _currentView;
        public object CurrentView
        {
            get { return _currentView; }
            set { OnPropertyChanged(ref _currentView, value); }
        }

        private MainViewModel _mainVM;
        public MainViewModel MainVM
        {
            get { return _mainVM; }
            set { OnPropertyChanged(ref _mainVM, value); }
        }

    }
16.09.2020 20:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.735
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und willkommen,

du möchtest also eine Navigation durchführen?
Schau mal in  Zugriff auf Property einer anderen Klasse/ViewModel bzw.  Wie implementiere ich einen Zurück-Button in einer App-Navigation mit MVVM?
17.09.2020 11:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.456
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Normalerweise hätte man ein MainViewModel, welches dem MainWindow zugeordnet ist, und dann SubViewModels, welche innerhalb des MainWindows oder in weiteren Fenstern aufgerufen werden können.

Auch hier kann man Objektorientierte Programmierung nutzen, anstatt object:

C#-Code:
public class MainViewModel : BaseViewModel
{
  public ObservableCollection<BaseSubViewModel> SubViewModels { /* ... */ }
  public BaseSubViewModel SelectedViewModel { /* ... */ }
}

public abstract class BaseSubViewModel : BaseViewModel
{
  // ...
}

public class HomeViewModel : BaseSubViewModel
{
  // ...
}

public class SettingsViewModel : BaseSubViewModel
{
  // ...
}

// etc.
17.09.2020 19:31 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.09.2020 07:24