2011-02-09 81 views
3

我完全采用了我们的Silverlight应用程序的MVVM模式。但是,我们的一些UI是数据驱动的。主要有两项...如何在我的视图模型中即时创建UI

  1. 菜单。我们正在使用Infragistics XamMenu。

  2. 我们有一个“仪表板”,允许用户添加“管理单元”。这有点像门户网站,比如iGoogle。

在UI上面的两种情况需要在运行时建立。目前,我在后台代码中运行代码,因为我没有看到简单的方法来访问ViewModel中的UI树。

为了在视图中运行代码,我在ViewModel中创建了一个事件,一旦数据加载就触发该事件。所以,我不得不在后面的视图代码中引用视图模型。我不喜欢它的它非常难看......所以基本上有两个问题:

  1. 我怎么能认为从该数据没有得到一个直接引用加载的视图模型得到一个消息viewmodel在后面的视图代码中?目前我从数据上下文中提取参考。

  2. 是否有可能在视图模型中构建UI并使用数据绑定。我想知道是否可以在视图模型中将contentcontrol的“内容”绑定到某种类型(不知道类型是什么)?当然,关于这个不好的部分是视图模型的可测试性似乎消失了。可以用这种方式绑定吗?

回答

2

要回答问题1,为什么不使用MVVM光“Messenger”类。

在您看来,您注册收听通过以下方式的消息:

Messenger.Default.Register<bool>(this, "MessageId", DoSomething); 

如果DoSomething的是,在一个布尔参数采用(例如)的方法。

然后,从您的视图模型发送邮件时,您执行以下操作:

Messenger.Default.Send(false, "MessageId"); 

希望帮助:)你需要添加到您的usings:

using GalaSoft.MvvmLight.Messaging; 
+0

OK ..我想我不确定在这里做什么。我基本上想发送“X”发生的“消息”。没有任何价值被传递......我只是想调整它,有点像事件,但不需要像发件人那样需要参考事件。那可能吗? – PilotBob 2011-02-11 20:56:37

相关问题