Hallo, ich habe einen usercontrol, der in seinem Ctor ein viewModel instanziert und als Datacontext zugewiesen wird. Dieser ViewModel wird auch in der App.xaml.cs gesetzt :
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e);
// Initialize main window and view model var mainWindow = new Demo(); Projekt[] projekte = Datenquelle.GetProjekte(); var viewModel = new SystemViewModel(projekte); mainWindow.DataContext = viewModel; mainWindow.Show(); } }
nun habe ich das Problem das SystemViewModel 2 mal instanziert wird. Mein Ziel ist es eine einzige Instanz des Systemvielmodel, einmal der Hauptapplikation und dem Usercontrol zuzuweisen. Danke schon mal
1. ViewModel niemals im Konstruktor instanziieren 2. ViewModel von aussen dem DataContext zuweisen
Die einfachste Variante ist sicherlich, das ViewModel in der App.xaml zu instanziieren, der View als DataContext zuzuweisen und das, was für dein UserControl notwendig ist, per Binding weiter zu geben.
Vielen Dank, ich habe das jetzt mit einem singlton gelöst. in der App.xaml wird eine Instanz des ViewModels erstellt.statt den Constructor habe ich das Loaded event vom User control benutzt um auf die Instanz des ViewModel zu zugreiffen.
Du schreibst das du dem UserControl und der Hauptanwendung jeweils im Konstruktor das SystemViewModel instanzierst. Wäre es nicht besser, du lässt es nur in der App.xaml.cs erledigen und übergibst den selben DataContext beim erstellen des UserControls bzw. wenn du das UserControl irgendwo hinzufügst?
ich habe das jetzt mit einem singlton gelöst. in der App.xaml wird eine Instanz des ViewModels erstellt.statt den Constructor habe ich das Loaded event vom User control benutzt um auf die Instanz des ViewModel zu zugreiffen.