让Silverlight MVVM使用Expression Blend设计时数据?

让Silverlight MVVM使用Expression Blend设计时数据?,第1张

概述我是Silverlight的MVVM模式的大力支持者.目前,我通过在视图后面的代码中查看ViewModel将ViewModel连接到View,因此: public partial class SomePage : UserControl{ public SomePage() { InitializeComponent(); // New up a 我是Silverlight的MVVM模式的大力支持者.目前,我通过在视图后面的代码中查看viewmodel将viewmodel连接到VIEw,因此:

public partial class SomePage : UserControl{    public SomePage()    {        InitializeComponent();        // New up a viewmodel and bind to layout root        var vm = new Someviewmodel();        LayoutRoot.DataContext = vm;    }}

然后所有绑定都在VIEw中处理,所有逻辑都在viewmodel中处理,如模式所示.

但是,以这种方式连接它们意味着设计器不能很好地工作,我不能使用Expression Blend设计时数据.我知道有一些像MVVM light这样的库可以帮助实现这一切,但我不想引入一个库,因为它是“还有一件事”需要处理.

在维护设计器功能的同时,是否有一个简单的模式可以让MVVM连接到Silverlight,特别是在Blend中?我已经做了一些谷歌搜索,但有那么多过时的文章和WPF和Silverlight和旧版本之间的这么多混淆,我很难弄清楚要使用哪些.

顺便说一句,如果重要的话,我会专注于使用VS2010的SL4.

解决方法 您可以使用几种方法.

首先,让Expression的Sample Data和设计时属性(即d:DataContext)接管设计器.在您的代码中,您只需调整视图模型绑定:

if (!DesignerPropertIEs.IsInDesignTool){   var vm = new Someviewmodel();   LayoutRoot.DataContext = vm; }

其次,您可以使用绑定的特殊设计时视图模型:

LayoutRoot.DataContext = DesignerPropertIEs.IsInDesignTool ?    new designviewModel() : new Myviewmodel();

最后,另一种方法是管理视图模型中的数据.我不喜欢这样,因为它将责任分散在所有视图模型中,但您有更高的精度:

// constructorprivate Widget[] _designData = new[] { new Widget("Test One"),new Widget("Test Two") };public Myviewmodel(){   if (DesignerPropertIEs.IsInDesignTool)   {       MyCollection = new ObservableCollection<Widget>(_designData);          }   else    {       MyService.Completed += MyServiceCompleted;       MyService.RequestWidgets();   }}private voID MyServiceCompleted(object sender,AsynchronousEventArgs ae){   // load up the collection here}

希望有所帮助!

总结

以上是内存溢出为你收集整理的让Silverlight MVVM使用Expression Blend设计时数据?全部内容,希望文章能够帮你解决让Silverlight MVVM使用Expression Blend设计时数据?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1004854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存