Catel MVVM:如何在窗口之间传递数据
本文关键字:之间 数据 窗口 MVVM Catel | 更新日期: 2023-09-27 18:19:54
大家好,我很难在Catel MVVM模型中的视图模型之间发送数据。我有一个按钮,点击后我想打开一个新窗口,并向新打开的窗口发送一些数据(对象)。然而,我自己无法解决这个问题,所以你能帮我吗?
在我的第一个视图模型中,我有:
private readonly IShowStopInfo stopInfo;
//Main constructor of the class
public StopViewModel(IGrtrService grtrService, IShowStopInfo stopInfo)
{
this.stopInfo = stopInfo;
Argument.IsNotNull(() => grtrService);
_grtrService = grtrService;
AllStops = _grtrService.LoadStop();
Stop_Line = _grtrService.LoadLines();
ShowSelectedValue = new Command(OnStopsInfo);
}
public Command ShowSelectedValue { get; private set; }
private void OnStopsInfo()
{
stopInfo.ShowStopInfo();
}
//Getting Selected Stop from the list
public Stop SelectedStop
{
get { return GetValue<Stop>(SelectedStopProperty); }
set { SetValue(SelectedStopProperty, value); }
}
public static readonly PropertyData SelectedStopProperty = RegisterProperty("SelectedStop", typeof(Stop));
在我的情况下,我想从方法"SelectedStop"发送结果,我该怎么做?
请查看Catel的"开始使用WPF"部分。它将指导您创建具有所有基础知识的第一个应用程序。其中一个基础是显示一个带有上下文的窗口。
你可以在这里找到一个非常详细的解释(包括屏幕截图等)。
基本上,您必须使用窗口视图模型的第一个参数作为模型注入(在本例中是Person模型)。
然后查看"将所有东西连接在一起"部分,尤其是命令(其中IUIVisualizerService用于创建一个包含当前选定人员或家庭的窗口)。
例如,细节vm看起来像这样:
public class MyStopDetailsViewModel : ViewModelBase
{
public MyStopDetailsViewModel(Stop myStop, IMessageService messageService, IPleaseWaitService pleaseWaitService)
{
// Here is the context with the injected Stop parameter. Note that I have
// also injected several other services to show how you can use the combination
}
}
您可以如下调用它(如示例中所示):
var typeFactory = this.GetTypeFactory();
var stopDetailsViewModel = typeFactory.CreateInstanceWithParametersAndAutoCompletion<MyStopDetailsViewModel>(SelecteedStop);
_uiVisualizerService.ShowDialog(stopDetailsViewModel );