2016-12-02 2 views
0

Я немного оглянулся на то, как вручную запускать Viewmodel для запуска снова, но не был уверен, что они были направлены на то, что я действительно хочу.Ручной запуск определенного метода в Viewmodel

Что я хочу сделать, так это возможность запуска определенного метода, который находится внутри моей модели просмотра всякий раз, когда определенное Окно закрыто, без запуска всех них. Есть ли способ привязать этот метод к закрытому событию второго окна? Благодарю.

+0

Итак, ваше второе окно также имеет viewmodel, не так ли? Итак, у вас есть viewmodel для каждого окна? – FCin

+0

Я этого не делаю. У меня есть только один для моего главного окна, но хотелось бы, чтобы для определенного метода, который находится внутри этой модели просмотра, запускался всякий раз, когда я закрываю второй, так что изменения в моей базе данных, которые были сделаны во втором окне, отражаются в главном окне , – RockGuitarist1

+0

И где вы создаете это окно? Вы создаете его внутри viewmodel? У вас есть ссылка на это окно? Чтобы действительно получить то, что может предложить mvvm, я просто создаю viewmodel для второго окна, а затем привяжу его к событию. В противном случае у вас остался код позади и события – FCin

ответ

1

Если вы хотите придерживаться MVVM и сделать это правильно, в легко расширять и поддерживать, как вы можете сделать это так:

public class FirstViewModel : IWindowCloseNotifier { 

    public SecondViewModel SecondVm { get; set; } 

    public FirstViewModel() 
    { 
     SecondVm = new SecondViewModel(this); 
    } 

    public void Close(IWindowCloseNotifierArgs args) 
    { 
     // Window is now closed! 
    } 
} 

интерфейс гарантирует, что SecondViewModel может использовать только Close метод.

public interface IWindowCloseNotifier { 
     void Close(IWindowClosedArgs args); 
    } 

    public class SecondViewModel { 

     private readonly IWindowCloseNotifier _windowCloseNotifier; 

     public SecondViewModel(IWindowCloseNotifier windowCloseNotifier) { 
      _windowCloseNotifier = windowCloseNotifier; 
     } 

     public void OnClose() 
     { 
      _windowCloser.Close(your args); 
     } 
    } 

Если SecondViewModel не ребенок FirstViewModel затем использовать Опубликовать Подписка шаблон для обмена данными между ViewModels.

Мои имена не велики, но у меня нет других идей.

0

Вы используете MVVM Light или любые другие рамки MVVM?

если так: у вас есть несколько вариантов в зависимости от вашего дизайна вы можете выбрать

  1. EventToCommand
  2. Посланник (Если я идти по этому пути создать поведение и сохранить логику там, так что его чистый)
Смежные вопросы