十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了MVVM中怎么实现一个Messager类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

简化Messager类
看MVVMLight的Messager源码,自己实现了一个简单的Messager类。
Messager类可以在MVVM中,实现View与VM、VM与VM、View与View的通信。
public class Messager
{
private static Messager _MessageInstance;
private Dictionary _MessageCollection=new Dictionary ();
private Dictionary _MessageTCollection = new Dictionary();
public static Messager Default
{
get
{
if (_MessageInstance == null)
{
_MessageInstance = new Messager();
}
return _MessageInstance;
}
}
public void Register(string key,Action action)
{
_MessageCollection.Add(key,action);
}
public void Register(string key, Action action)
{
ActionClass actionClass = new ActionClass();
actionClass.action = action;
_MessageTCollection.Add(key, actionClass);
}
public void Send(string key)
{
if (_MessageCollection.Keys.Contains(key))
{
_MessageCollection[key].Invoke();
}
}
public void Send(string key,T para)
{
if (_MessageTCollection.Keys.Contains(key))
{
ActionClass actionClass=(ActionClass) _MessageTCollection[key];
actionClass.action.Invoke(para);
}
}
} 主要通过Register方法来注册,Send方法来触发。
比如,VM中需要显示一个窗体,为了不破坏MVVM模式,我们可以把显示窗体的方法写在View中,并注册到Messager
Messager.Default.Register("ChangeControlShow", ExecuteChangedContrlShow); private void ExecuteChangedContrlShow(string msg) { //some code... }
在VM中调用
Messager.Default.Send("ChangeControlShow","test");
Send有两个参数,第一个是方法的Key,根据这个Key,可以找到唯一的方法,第二个参数是需要调用的方法的参数。
上述内容就是MVVM中怎么实现一个Messager类,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联成都网站设计公司行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。