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设计时数据?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)