2014-10-28 4 views
0

Поскольку я продолжаю адаптироваться к новому миру wpf и mvvm, я нахожусь с другой проблемой, которая оказывается немного досадной.Передача параметров из одной модели представления в другую в wpf

В формах окон, если мне нужна новая форма для принятия параметра, я просто передал информацию, необходимую мне для конструктора этой формы. Так как Winforms по существу является кодовым образцом модели, это не проблема.

Теперь я нахожусь с MainWindow (контролируется MainWindowViewModel) и Login (контролируется LoginViewModel), который сначала отображается как диалог. Я отсортировал проблему с отсутствующим результатом диалога, и я могу открыть главное окно после закрытия диалогового окна входа.

Диалоговое окно входа в систему отображается в ответ на ввод в приложение при помощи следующего кода;

dim dlg As New Login 

    If dlg.ShowDialog() = True Then 

    Else 
     Current.Shutdown(0) 
    End If 

и я использую использовать следующие в коде позади окна входа в систему, чтобы заботиться показывать главное окно, когда диалог закрывается Логин;

Public Sub New 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    Application.Current.ShutdownMode =ShutdownMode.OnExplicitShutdown 
End Sub 

Protected Overrides Sub OnClosed(e As EventArgs) 
MyBase.OnClosed(e) 
Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose 
End Sub 

Теперь MainWindow уже знает, что это DataContext является MainWindoViewModel, потому что я установил, что, когда проектирование его смеси, так как я прохожу все параметры, которые я хочу, чтобы перейти от LoginViewModel к MainWindowViewModel?

Я могу читать C#, но, если возможно, предпочтут vb. Я знаю, что это то, что я хочу делать часто, поэтому, если есть общий способ сделать это, тогда я так хочу.

Благодарности

+0

Обычно вы используете какую-то систему обмена сообщениями для передачи данных между несвязанными ViewModels, однако в вашей ситуации с Login и Main ViewModels я бы не создавал MainViewModel до тех пор, пока Login Login не будет успешным, и я передам его необходимые ему данные в конструкторе. У меня есть пример [здесь] (http://stackoverflow.com/a/12861797/302677), если вам интересно. – Rachel

ответ

0

рамки MVVM обычно реализуют какой-то системы обмена сообщениями, чтобы перемещать данные между ViewModels или иногда между ViewModel и зрения.

Вы можете посмотреть, как обмен сообщениями обрабатывается в некоторых из наиболее популярных фреймворков, таких как MvvmLight или MvvmCross. Обычно это похоже на событие, которое использует слабую ссылку для предотвращения жесткой связи, поэтому вы можете зарегистрироваться для типа сообщения, а затем из другой модели просмотра вы публикуете сообщение любому зарегистрированному слушателю.

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

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