Fenster geladen und WPF

Ich habe ein WPF-Projekt in Windows 2012, in dem ich einige Informationen in das Window Loaded-Ereignis laden muss. Ich muss dies jedoch im Ansichtsmodell und nicht im CodeBehind tun. Ich versuche folgenden Code zu verwenden:

In meinem Xaml:

   

In meinem Ansichtsmodell:

 private DelegateCommand _WindowLoadedCommand; public DelegateCommand WindowLoadedCommand { get { return _WindowLoadedCommand; } private set { _WindowLoadedCommand = value; } } public ShellViewModel() { WindowLoadedCommand = new DelegateCommand(WindowLoadedAction); } protected void WindowLoadedAction() { ... } 

Mein angefügtes Verhalten:

 public class WindowLoadedBehavior : Behavior { [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate", Justification = "Dependency Property. Allow public.")] public static DependencyProperty LoadedCommandProperty = DependencyProperty.Register("LoadedCommand", typeof(ICommand), typeof(WindowLoadedBehavior), new PropertyMetadata(null)); public ICommand LoadedCommand { get { return (ICommand)GetValue(LoadedCommandProperty); } set { SetValue(LoadedCommandProperty, value); } } protected override void OnAttached() { base.OnAttached(); AssociatedObject.Loaded += AssociatedObject_Loaded; } protected override void OnDetaching() { AssociatedObject.Loaded -= AssociatedObject_Loaded; base.OnDetaching(); } private void AssociatedObject_Loaded(object sender, RoutedEventArgs e) { if (LoadedCommand != null) LoadedCommand.Execute(null); } } 

Der OnAttached-, AssociatedObject_Loaded- und LoadedCommand-Befehl werden alle ausgetriggers, aber der Satz “LoadedCommand” wird nicht ausgetriggers, und der WindowLoadedCommand-Befehl wird offensichtlich nicht ausgetriggers. Irgendwelche Anhaltspunkte, was ich tun kann, damit das funktioniert?

Es gibt einige Möglichkeiten. Einige davon sind hier aufgelistet:

Wie rufe ich ein geladenes Ereignis eines Fensters in WPF MVVM auf?

In dem unwahrscheinlichen Fall, dass Sie oder jemand anderes daran interessiert ist, dass Sie mehrere Stunden damit verbringen, eine Aufgabe auszuführen, die 30 Sekunden hätte dauern sollen, sollten Sie dies stattdessen versuchen.

 public MainWindow() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { ShellViewModel.Instance.WindowLoadedCommand.Execute(null); }