由另一个类调用的触发事件

时间:2016-04-19 09:59:23

标签: c# events mvvm triggers

当我的用户界面打电话给我的班级时,我想触发我的活动,生活:

enter image description here

在我的UI中,我使用字符串参数

调用我的类ScanClass
ScanMessage scn = new ScanMessage(message);

在我的课程ScanMessage中我做了这个:

public class ScanMessage
{
    public delegate void OnScanMessageReceived(string message);

    public ScanMessage()
    {
    }

    public ScanMessage(string message)
    {
        MessageReceived(message);
    }

    public event OnScanMessageReceived MessageReceived;
}

我在我的FirstViewModel中做了这个

public FirstViewModel()
    {
        var scanMessage = new ScanMessage();
        scanMessage.MessageReceived += ScanMessage_MessageReceived;
    }

    private void ScanMessage_MessageReceived(string message)
    {
        //Do something
    }

好吧,如果我在这里发帖,那是因为我有问题而我无法帮助解决问题!

感谢。

1 个答案:

答案 0 :(得分:1)

原因是retry的实例不同。 UI类有不同的实例,VM有不同的实例。因此,在其他一个实例上没有听到提起事件的事件。

如果你需要做的所有ScanMessage都是广播事件,你可以拥有它的单例实例

ScanMessage

然后从UI中你可以调用

public class ScanMessage
{
    public delegate void OnScanMessageReceived(string message);

    private static ScanMessage _scanMessage = new ScanMessage();
    private ScanMessage()
    {
    }

    public static ScanMessage Instance
    {
        get
        {
            return _scanMessage;
        }
    }
    public void BroadCastMessage(string message)
    {
        MessageReceived(message);
    }

    public event OnScanMessageReceived MessageReceived;
}

在你的虚拟机中你可以

ScanMessage.Instance.BroadCastMessage(message);