2015-05-13 3 views
1

Я использую библиотеку WPA MahApps.metro с MVVM. У меня есть ViewModel, из которого мне нужно отобразить диалоговое окно. В MetroWindow есть ShowMessageAsync. Но каков правильный способ доступа к нему из ViewModel? Насколько я понимаю, мне нужен экземпляр View, но передача этого в ViewModel не кажется хорошим подходом.Как получить доступ к методу ShowMessageAsync для MetroWindow из ViewModel

+0

Возможный дубликат [Mahapp ShowMessageAsync MvvM] (http://stackoverflow.com/questions/26825250/mahapp-showmessageasync-mvvm) – fuglede

ответ

1

Используйте следующий подход:

  1. Возьмем Action<T>ShowMessageAsync в вашем ViewModel, которые вы связывании с окном.

  2. Теперь создайте поведение для окна и использовать следующий код в поведении

    protected override void OnAttached() 
    { 
        base.OnAttached(); 
        this.AssociatedObject.Loaded += AssociatedObject_Loaded; 
    } 
    
    void AssociatedObject_Loaded(object sender, RoutedEventArgs e) 
    { 
        if (this.AssociatedObject.DataContext is WindowViewModel) 
        { 
         WindowViewModel vm = this.AssociatedObject.DataContext as WindowViewModel; 
    
         vm.ShowMessageAsync = OnShowMessageAsync; 
        } 
    } 
    
    private void OnShowMessageAsync(T param) 
    { 
         //Write your logic to call ShowMessageAsync method. 
    } 
    

Теперь, таким образом, от ViewModel из ваших MainWindow вы будете иметь возможность открыть еще одно дочернее окно.

Смежные вопросы