2016-10-25 1 views
0

Ich möchte wissen, dass es eine Möglichkeit gibt, meine aktuelle Ansicht nach dem Laden im Prismenbereich zu aktualisieren. Meine Ansicht wird beim Laden automatisch aktualisiert und ich benutze lebenslange Schnittstelle, um jedes Mal beim Aufruf geladen zu werden. gibt es einen Weg, wo wir die aktuelle Ansicht wie Update-Ordner aktualisieren können ??Wie aktualisiere ich cuurent view in prism region?

+0

nicht sicher, was Sie mit "Update-Ordner" meinen, aber Sie können 'INavigationAware' verwenden, um benachrichtigt zu werden, wenn zu und von – Haukinger

+0

Navigieren Ich möchte Modul nach einem Ereignis, das in demselben Modul –

+0

empfangen wird, ein Modul kann nicht erneut geladen werden, es ist einmal geladen und dann ist es da. Willst du das _view_ neu laden? – Haukinger

Antwort

0

Zunächst sollte sich das Ansichtsmodell (und damit die Ansicht) automatisch aktualisieren, wenn sich das Modell ändert, entweder durch INotifyPropertyChanged, dedizierte Ereignisse, Verwendung des EventAggregator oder eines anderen Nachrichtenübergabesystems. Wenn Sie möchten, dass das Ansichtsmodell nur zu einem bestimmten Zeitpunkt aktualisiert wird (z. B. wenn der Benutzer auf eine Aktualisierungsschaltfläche klickt), sollten Sie den Aktualisierungscode aus der NavigatedTo-Methode entfernen und diese Methode aufrufen NavigatedTo und UpdateCommand.

internal class MyViewModel : BindableBase, INavigationAware 
{ 
    public MyViewModel(IDataSource theSourceOfData) 
    { 
     _theSourceOfData = theSourceOfData; 
     UpdateCommand = new DelegateCommand(UpdateData); 
    } 

    public string MyProperty 
    { 
     get 
     { 
      return _myProperty; 
     } 
     set 
     { 
      SetProperty(ref _myProperty, value); 
     } 
    } 

    public DelegateCommand UpdateCommand { get; } 

    #region INavigationAware 
    public void OnNavigatedTo(NavigationContext navigationContext) 
    { 
     UpdateData(); 
    } 
    #endregion 

    #region private 
    private readonly IDataSource _theSourceOfData; 

    private string _myProperty; 

    private void UpdateData() 
    { 
     _myProperty = _theSourceOfData.FetchTheData(); 
    } 
    #endregion 
} 

Nun, wenn wir die Update-Schaltfläche klicken, wird MyViewModel.MyProperty aktualisiert und die Meldung Änderung gedrängt, um die Aussicht. Das Gleiche passiert, wenn wir zum Ansichtsmodell navigieren.

+0

Da ich dies bereits mithilfe von Delegatbefehlen implementiert habe, habe ich Eigenschaften aktualisiert, indem ich eine Methode aufgerufen habe, die im Delegate-Befehl registriert ist. Ich war neugierig auf einen einfacheren Weg, anstatt eine Methode aufzurufen, um alle Eigenschaften zurück zu aktualisieren. Verwenden Sie DataSource, um uns auf andere Weise zu holen? –

+0

Sie können das Hintergrundfeld löschen und direkt auf die Datenquelle im Getter von 'MyProperty' zugreifen, wodurch die Verantwortung für das korrekte Zwischenspeichern von Daten aus dem Ansichtsmodell entfällt. Das Ansichtsmodell sollte das 'PropertyChanged'-Ereignis der Datenquelle beobachten, um seine eigenen auszulösen, wenn sich eine Datenquelle ändert, so dass sich' MyProperty' ändert. Dies kann leicht und refactoring-sicher durchgeführt werden, indem der Property-Beobachter verwendet wird: https://joshsmithsonwpf.wordpress.com/2009/07/11/one-way-to-avoid-messy-propertychanged-event-handling/ – Haukinger

Verwandte Themen