使用 MVVM 模型处理 Silverlight 中的 OnLoad(已加载)
我是 Silverlight(版本 4)和 MVVM 的新手,我似乎无法弄清楚如何将 XAML 中的命令绑定到我的 ViewModel 以实现 UserControl 的“Loaded”事件。我可以将命令绑定到这样的按钮...
<Button Command="{Binding ShowImageClick}" />
并且效果很好。但我不知道如何做类似的加载。我尝试了这个,但它抛出了一个异常,说“无法分配属性”......
<UserControl Loaded="{Binding WindowLoad}">
有什么想法吗?
I am new to Silverlight (version 4) and MVVM, and I can't seem to figure out how to bind a command in the XAML to my ViewModel for the "Loaded" event of a UserControl. I can bind a command to a button like this...
<Button Command="{Binding ShowImageClick}" />
And it works fine. But I have no idea how to do something similiar onload. I tried this but it threw an exception saying "Failed to assign property"...
<UserControl Loaded="{Binding WindowLoad}">
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
一种可能的方法是使用 此代码片段 我创建的目的是使用 附加行为。
我希望这有帮助。
谢谢,
达米安
One possible approach could be using this code snippet I created to hook-up commands with events using Attached Behaviors.
I hope this helps.
Thanks,
Damian
Codeplex 上的 Expression Blend 示例项目可能会有所帮助:
表达混合样本
例如:
The Expression Blend Samples project on Codeplex may be helpful:
Expression Blend Samples
e.g.:
我很喜欢达米安的答案,并且通常会使用该解决方案。
另一种常见做法是 InvokeCommandAction 或类似行为在混合中。
I'm a fan of Damian's answer and would typically use that solution.
Another common practice is the InvokeCommandAction or similar behavior in Blend.
不确定这是否是最佳实践,但在 ViewModel 类中简单地使用构造函数似乎对我来说已经足够好了......
Not sure if this is best practice or not, but simply having a constructor in the ViewModel class seems to work well enough for me...
我刚刚发现这可能会导致内存泄漏,并已恢复为老式的 Loaded。要检查这一点,请将终结器添加到您的用户控件/页面,并确保在执行 GC.Collect() 时调用它。
I just found that can cause a memory leak and have reverted to old-school Loaded. To check this, add a finalizer to your user control/page and ensure it is called when you do a GC.Collect().
也许这不是正确的方法,但对我有用。
视图:
视图模型:
当 UserControl 加载时,它将尝试获取标记值。在那里你可以初始化一些东西。
Maybe this helps its not the proper way but it works for me.
View:
View Model:
when UserControl loads it will try to get the tag value. In there you can initialize things.