Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MVVM工具包指示灯发送空消息或通知_Mvvm_Mvvm Light - Fatal编程技术网

使用MVVM工具包指示灯发送空消息或通知

使用MVVM工具包指示灯发送空消息或通知,mvvm,mvvm-light,Mvvm,Mvvm Light,我正在使用MVVM Light工具包。我找不到Messenger或Notification类的任何组件来发送空消息 视图模型1: private int _selectedWeeklyRotation; public int SelectedWeeklyRotation { get { return _selectedWeeklyRotation; } set { if(_selectedWeeklyRo

我正在使用MVVM Light工具包。我找不到Messenger或Notification类的任何组件来发送空消息

视图模型1:

 private int _selectedWeeklyRotation;
    public int SelectedWeeklyRotation
    {
        get { return _selectedWeeklyRotation; }
        set
        { 
            if(_selectedWeeklyRotation == value)
                return;

            _selectedWeeklyRotation = value;
            this.OnPropertyChanged("SelectedWeeklyRotation");
            if(value > 1)
                Messenger.Default.Send();                     
        }
    }
视图模型2:

Ctor:

Messenger.Default.Register(this, CreateAnotherTimeTable); 

private void CreateAnotherTimeTable()
{

}
我只需要向另一个ViewModel发送通知,根本不发送数据


MVVM Light Toolkit library有可能做到这一点吗?

我认为这是不可能的,坦率地说,我不认为有这样的信息有什么意义。您也可以发送一个字符串“SelectedWeeklyRotation”。随着应用程序中广播消息和接收者数量的增加,出现一条具有某种意义的空消息似乎很奇怪

在我使用的MVVM Light版本中,甚至不可能发送空消息

但是,我确实在ViewModelBase中看到了一个方法:

// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged(MyPropertyPropertyName, oldValue, value, true);

这可能会引起你的兴趣

真的没有办法做到这一点,而且在某些方面违背了messenger类的观点。我不想写一篇关于你做错事的帖子,但我觉得我被卡住了。messenger类的工作方式是,您有两个订阅相同概念的参与方,这是一个观察者模型。如果没有类似的概念或信息,就真的无法将两个对象绑定在一起。通用消息(无论是简单字符串还是自定义消息)充当订阅和发布类的集合点

如果ViewModel发布知道试图发送给它的ViewModel的类型,则可能

Messenger.Default.Send<Type>(typeof(ViewModelToSendTo);
Messenger.Default.Send(typeof(ViewModelToSendTo);

这将作为一个非常简单的交互点,您也不必创建自定义类。一些纯粹主义者可能会对这种方法有问题,因为它将发布类与订阅者耦合起来。

除非我误解了什么,否则您不能通过创建和发送自定义“信号消息”来实现这一点吗通过Messenger键入

public class WeeklyRotationSignal {}

Messenger.Default.Send(new WeeklyRotationSignal());
然后注册到另一个视图模型中:

Messenger.Default.Register<WeeklyRotationSignal>(this, msg => doWork);
Messenger.Default.Register(这个,msg=>doWork);

您可以尝试发送带有字符串标记的简单消息,然后通过匹配字符串标记来接收该消息。类似如下:

代码的发送方部分可能位于类似ViewModel1.cs的位置

Messenger.Default.Send<string>("Dummy text message", "String_ToHelpMatchTheMsg");
Messenger.Default.Send(“虚拟文本消息”,“字符串”to helpmatchThemsg”);
响应上述消息的代码的接收端部分,可能位于其他文件中,如ViewModel2.cs

Messenger.Default.Register(这是“String\u to helpmatchThemsg”,executethis函数);
私有void executethis函数(字符串strMsg)
{
//收到消息后,您的代码将转到此处运行
//下一行将显示:“虚拟文本消息”
System.Windows.Browser.HtmlPage.Window.Alert(“消息传递:+strMsg”);
}
请注意,您不必对与上述消息代码一起传递的文本消息执行任何操作。只需代码的一部分向代码的另一部分发送ping以请求其他部分执行某些代码。重要的字符串是我使用“string\u帮助匹配msg”的字符串因为这是用于匹配发送方和接收方的密钥。就像创建自己的准事件一样,一旦Send方法运行,Register方法就会收到通知并启动自己的函数来运行

我将其与子窗口上的“关闭”按钮一起使用来关闭它。子窗口视图上的“关闭”按钮绑定到其childWindowViewModel上的中继命令。该中继命令具有上面的代码,用于向ParentViewModel发送消息。ParentViewModel上的寄存器部分通过触发关闭的方法来响应该消息最初从该parentViewModel实例化的子窗口

一旦您对消息传递更加熟悉,您将能够使用更多属性,以便接收方可以回拨发送方以返回状态或一些数据。请查找委托和lambda函数以实现此目的

所有这些都是为了避免将代码放在代码后面以关闭子窗口!:-) 使用你认为合适的

干杯。
马里奥

呃。。。在这里提供服务的工具包的作者?@karinp看起来很有趣,你找到该方法的任何示例了吗?我找不到有关该活动使用情况的任何信息/示例项目。
Messenger.Default.Register<string>(this, "String_ToHelpMatchTheMsg", executeThisFunction);

private void executeThisFunction(string strMsg)
{
   //your code would go here to run upon receiving the message
   // The following line will display: "Dummy text message" 
   System.Windows.Browser.HtmlPage.Window.Alert("msg passed: " + strMsg); 
}