2 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)我請(qǐng)求一個(gè)新的視圖模型時(shí),我如何告訴 MvvmLight 創(chuàng)建新的視圖模型?
使用訪問 a 的方法的重載,并向其傳遞唯一值:GetInstance
string
string
public MainViewModel Main => ServiceLocator.Current.GetInstance<MainViewModel>(System.Guid.NewGuid().ToString());

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
我們總是使用Ninject,默認(rèn)情況下它似乎可以做你想要的:
首先,為 Ninject 添加對(duì) Nuget 包的引用
然后向項(xiàng)目中添加一個(gè)類并使用如下所示的代碼...ViewModelLocator
public class ViewModelLocator {
public IKernel Kernel { get; set; }
public ViewModelLocator() {
Kernel = new StandardKernel();
}
public MainWindowViewModel MainWindowViewModel =>
Kernel.Get<MainWindowViewModel>();
public ProductDetailsWindowViewModel ProductDetailsWindowViewModel =>
Kernel.Get<ProductDetailsWindowViewModel>();
}
在 App.xaml 中為定位器添加靜態(tài)資源,如下所示...
<Application.Resources>
<viewModels:ViewModelLocator x:Key="Locator" />
</Application.Resources>
確保您的視圖模型繼承自 ...ViewModelBase
public class ProductDetailsWindowViewModel : ViewModelBase
// ...
然后你應(yīng)該按照你想要的方式工作。每個(gè)窗口都將獲得自己的類實(shí)例。DataContext
你需要在這里確保的一件事是自己清理,否則你最終會(huì)有大量的鬼視圖模型。在窗口的卸載事件中,將DataContext
private void Window_Closing(object sender, CancelEventArgs e) {
DataContext = null;
}
- 2 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報(bào)