如何使用带有两个构造函数的viewmodel的Unity框架显示子窗口?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用带有两个构造函数的viewmodel的Unity框架显示子窗口?相关的知识,希望对你有一定的参考价值。
我正在学习MVVM,而且我很难理解他的一些概念。我的问题是如何显示一个子窗口,他的视图模型接受构造函数,一个用于添加新对象,用新对象初始化对象,另一个用于修改用第二个构造函数传递的对象。我不知道使用Unity的方式是否正确。所以基本上我有两个问题:
- 我使用统一的方式是对的吗?
- 如何打开他的视图模型有两个构造函数的子窗口,一个用于编辑模式,另一个用于添加模式?
这是我在app.xaml.cs中的代码:
public partial class App : Application
{
public static readonly UnityContainer container = new UnityContainer();
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
container.RegisterType<IMemberRepository, MemberRepository>();
container.RegisterType<ShellViewModel>();
var window = new Shell
{
DataContext = container.Resolve<ShellViewModel>()
};
window.ShowDialog();
}
}
这是我在SellViewModel中打开子窗口的代码:
public ShellViewModel()
{
NewMember = new DelegateCommand(ShowMethod);
}
private void ShowMethod()
{
var child = new AddMemberView
{
DataContext = App.container.Resolve<AddMemberViewModel>()
};
child.ShowDialog();
}
在我的子窗口中的这个构造函数:
public AddMemberViewModel(IMemberRepository repo, Member member = null)
{
_repo = repo;
SaveCommand = new DelegateCommand(SaveMember, CanSave);
if (member == null)
_Member = new Member();
else
_Member = member;
}
编辑:她我只使用一个构造函数,但在这两种情况下如何传递我的情况下的Member对象?
答案
我认为对于统一容器的使用存在误解,我怀疑你期望统一容器就像工厂模式一样。实际上它更像是Singleton模式(不完全相同,但比Facotry更接近)。我建议在你的上下文中改变你的方式来实例化视图(和视图模型)
private void ShowMethod()
{
AddMemberViewModel vm = App.container.Resolve<AddMemberViewModel>();
vm.Member = new Member(); // Replace here with your Member object you want
// to edit
var child = new AddMemberView
{
DataContext = vm
};
child.ShowDialog();
}
你也可以忘记在容器中注册这个特定的视图模型(因为它似乎不应该在你的应用程序中有一个唯一的实例)并使用它lile this
private void ShowMethod()
{
IMemberRepository repo = App.container.Resolve<IMemberRepository>();
// Replace 'new Member()' here with your Member object you want to edit
AddMemberViewModel vm = new AddMemberViewModel(repo, new Member())
var child = new AddMemberView
{
DataContext = vm
};
child.ShowDialog();
}
以上是关于如何使用带有两个构造函数的viewmodel的Unity框架显示子窗口?的主要内容,如果未能解决你的问题,请参考以下文章
Android compose Navigation 和 ViewModel 构造函数调用
如何使用 Xamarin 和 Autofac 将构造函数依赖项注入 ViewModel?
如何使用 Xamarin.Forms.DependencyService 注入具有构造函数注入的 ViewModel