gpt4 book ai didi

c# - 使用 MVVMLight 将变量传递给第二个窗口?

转载 作者:太空宇宙 更新时间:2023-11-03 22:52:56 25 4
gpt4 key购买 nike

我正在构建一个应用程序来自学 MVVM 并通过一些谷歌搜索(和一些尝试错误)我已经设法达到可以从 ViewModel 打开第二个窗口但不能从一个页面传递变量的地步给另一个。这是我的 View 模型。

    public VendorSelectViewModel()
{
Ping ping = new Ping();
PingReply pingresult = ping.Send("192.168.1.10");
if (pingresult.Status.ToString() == "Success")
{
LoadVendorsAsync();
}
else
{
LoadVendors();
}

NextCommand = new RelayCommand(NextWindow);
}

public ICommand NextCommand { get; private set; }

void NextWindow()
{
Console.WriteLine(selectedVendor.VendorName);
Messenger.Default.Send(new NotificationMessage("NextWindow"));
}

在我看来我有这个

    public VendorSelectWindow()
{
InitializeComponent();
_vm = new Biz.Invoicer.VendorSelectViewModel();
DataContext = _vm;

Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived);
}

private void NotificationMessageReceived(NotificationMessage msg)
{
if (msg.Notification == "NextWindow")
{
var invoicerWindow = new InvoicerWindow();
invoicerWindow.Show();
}
}

所以我知道(或者我想我知道)这可能不是“最佳实践”,但我会回到这个并重构,因为我对 MVVM 模式和 MVVM Light 有了更好的了解。目前我正在尝试将变量从第一页 (VendorSelectViewModel) 的 ViewModel 传递到第二页 (InvoicerWindow),但我没有设法使语法正确。

我需要做什么才能将变量从一个页面传递到下一个页面?

最佳答案

首先,您可以传递一个任意对象作为 IMessenger.Send<TMessage> 的参数。方法 - TMessage类型参数不受限制。例如:

//ViewModel:
void NextWindow()
{
//...
int someValue = 10;
Messenger.Default.Send(someValue);
}

//View:
public VendorSelectWindow()
{
//...
Messenger.Default.Register<int>(this, MessageReceived);
}

private void MessageReceived(int value)
{
//...
}

如果您找到 NotificationMessage类在您的情况下特别有用,您可以使用通用 NotificationMessage<T>版本,它公开了额外的属性 Content任意类型 T :

//ViewModel:
void NextWindow()
{
//...
int someValue = 10;
Messenger.Default.Send(new NotificationMessage<int>(someValue, "Notification text"));
}

//View:
public VendorSelectWindow()
{
//...
Messenger.Default.Register<NotificationMessage<int>>(this, MessageReceived);
}

private void MessageReceived(NotificationMessage<int> message)
{
var someValue = message.Content;
//...
}

或者,如果这不适合您,您可以创建自己的派生类 NotificationMessage并公开其他成员并将其用作消息对象。

关于c# - 使用 MVVMLight 将变量传递给第二个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com