我有一个应用程序,可以打开一个视图,允许您搜索数据。然而,为了进行搜索,用户必须选择他想要在什么类别下进行搜索。目前,我正在尝试弄清楚如何将所选类别从主视图模型(作为 int)传递到新搜索视图的视图模型。目前我正在尝试在主视图中使用类似的东西:
假设我有两种观点View1
and View2
每个都有各自的视图模型。View2ViewlModel
看起来像这样:
public class View2ViewlModel : ViewModelBase
{
private IDataService _dataService;
public int DivisionIdnt {get; set;}
public View2ViewModel(IDataService dataService)
{
_dataService = dataService;
}
}
还有里面View1
我们创造并开放View2
当收到消息时。
public View2()
{
InitializeComponent();
Messenger.Default.Register<NotificationMessage<int>>(this, (m) => NotificationMesageReceived(m, m.Content));
}
private void NotificationMesageReceived(NotificationMessage<int> msg, int divisionIdnt)
{
if (msg.Notification == "SearchCred")
{
var findCredentialView = new View2();
findCredentialView.ShowDialog();
}
}
消息已传入View1ViewModel
作为用户单击搜索按钮时发生的操作的一部分。问题是我想初始化DivisionIdnt
财产在View2ViewModel
对于新的View2
的值divisionIdnt
形成消息。我怎样才能做到这一点?我想过实例化一个View2ViewModel
在代码中,设置DivisionIdnt
到消息参数,然后设置DataContext
新的View2
到新创建的视图模型,如下所示:
private void NotificationMesageReceived(NotificationMessage<int> msg, int divisionIdnt)
{
if (msg.Notification == "SearchCred")
{
var findCredentialView = new View2();
var vm = new View2ViewModel();
vm.DivisionIdnt = divisionIdnt;
findCredentialView.DataContext = vm;
findCredentialView.ShowDialog();
}
}
然而,这不起作用,因为在View2ViewModel
,构造函数有一个IDataService
运行时由 DI 注入。