2017-10-15 2 views
-1

J'ai une application WPF qui montre le contenu d'un dossier dans une vue arborescente dans MainWindowView. Maintenant, j'ai une nouvelle fenêtre où l'utilisateur peut changer l'emplacement et appuyer sur recharger. Maintenant, je veux mettre à jour l'arborescence dans mon MainWindowView dès que l'utilisateur appuie sur le bouton Recharger. J'utilise un objet ObservableCollection qui est lié à l'arborescence. Mais je ne suis pas en mesure de mettre à jour la collection à partir de la fenêtre Modifier l'emplacement.Mise à jour de la collection observable à partir de différentes interfaces utilisateur

Je veux savoir comment mettre à jour ObservableCollection de MainWindowView à partir d'une fenêtre différente. Si je fais des changements dans le MainWindowView, alors il reflète immédiatement dans le TreeView

J'utilise l'architecture MVVM.

+0

-vous que nous soyons en mesure d'aider sans expliquer ce qui ne peut pas »signifie dans ce contexte et sans afficher de code du tout? –

+0

@PeterBons C'est ma question. Je veux savoir comment mettre à jour ObservableCollection de MainWindowView à partir d'une fenêtre différente. Si je fais des changements dans le MainWindowView, alors il reflète immédiatement dans le TreeView. – Joy

+0

Vous pouvez créer un FolderService et le transmettre aux deux ViewModels. –

Répondre

1

est-il une relation entre le MainWindow et le ChangeLocationWindow? Comment le ChangeLocationWindow montre-t-il, Show() ou ShowDialog()? Vérifiez la solution suivante, tous les problèmes, faites le moi savoir.

MainWindowViewModel:

public class MainWindowViewModel 
{ 
    public static MainWindowViewModel Instance = new MainWindowViewModel(); 

    public ObservableCollection<string> Contents = new ObservableCollection<string>(); 

    public string Location 
    { 
     get { return _location; } 
     set 
     { 
      if (_location != value) 
      { 
       _location = value; 
       ReloadContents(); 
      } 
     } 
    } 

    private MainWindowViewModel() 
    { 
    } 

    private void ReloadContents() 
    { 
     // fill test data 
     Contents.Add("Some test data."); 
    } 

    private string _location; 
} 

MainWindowView:

{ 
    public MainWindowView() 
    { 
     InitializeComponent(); 
     MyListBox.ItemsSource = MainWindowViewModel.Instance.Contents; 

     var changeLocationWindow = new ChangeLocationWindow(); 
     changeLocationWindow.Show(); 
    } 
} 

ChangeLocationWindow:

public partial class ChangeLocationWindow : Window 
{ 
    public ChangeLocationWindow() 
    { 
     InitializeComponent(); 
    } 

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     MainWindowViewModel.Instance.Location = "Test"; 
    } 
} 
+0

Merci @Iron. C'était vraiment utile. Cela a fonctionné pour moi hors de la boîte .. – Joy

0

La meilleure approche de votre problème consiste à utiliser le modèle de messagerie pour envoyer des notifications au modèle de vue principal d'un autre à propos de nouveaux changements.

Commander le link pour plus de détails,