我知道在MVVM中,我們不應該在視圖之間使用viewModel,但我的應用程序需要它。所以,我有 如何在兩個或更多視圖中共享單個Viewmodel?
說LinkView和LinkViewModel
在LinkWindow構造一個視圖,視圖模型對應
public LinkWindow(string path)
{
InitializeComponent();
LinkViewModel vm = new LinkViewModel(path);
this.DataContext = vm;
}
所以LinkWindow及其corrosponding LinkViewModel是初始化。現在,在LinkWindow我有一個按鈕,將彈出一個多窗口(在需要時),但我需要相同的視圖模型實例(VM)
按鈕工具命令"LinkEmailCommand"
LinkEmailCommand = new Command(DoEmailCommand, false);
在LinkViewModel
private void DoEmailCommand()
{
var EmailWindow = new EmailWindow();
EmailWindow.Show();
}
此EmailWindow不使用已經初始化的LinkViewModel。我怎麼做?
編輯 - 解決方案:
那麼,有什麼解決辦法是通過在構造函數「這個」
在LinkViewModel
private void DoEmailCommand()
{
var EmailWindow = new EmailWindow(this);
EmailWindow.Show();
}
然後在LinkWindow通過視圖模型對象中的一個構造函數
public LinkWindow(LinkViewModel vm)
{
InitializeComponent();
Title = FilrUI.Properties.Resources.ShareFilrEmail;
this.DataContext = vm;
}
這就是現在所有的單一可以在兩個視圖中使用視圖模型的立場。
Viewmodel初始化是在linkWindow.cs文件和LinkWindow.DataContext = vm中完成的;現在如何在DoEmailCommand()的命令中啓動ViewModel? – Debhere
因此,將當前(已初始化)的ViewModel傳遞給您的第二個視圖 var EmailWindow = new EmailWindow(this); EmailWindow.Show(); 並在EmailWindow的構造函數將其傳遞給DataContext屬性 – Koscik
謝謝,它完美的作品,我已更新我的代碼,以便其他人會受益。 – Debhere