使用MVVM模型处理Silverlight中的OnLoad(Loaded)事件

3

我是 Silverlight (版本 4) 及 MVVM 的新手,但我却无法弄清如何在 XAML 中将 UserControl 的 "Loaded" 事件绑定到我的 ViewModel 的命令。我可以像这样将命令绑定到按钮上...

<Button Command="{Binding ShowImageClick}" />

它能正常工作。但是我不知道如何在页面加载时执行类似的操作。我尝试了这个方法,但是它抛出了一个异常,说“无法分配属性”...

<UserControl Loaded="{Binding WindowLoad}">

有什么想法吗?

6个回答

2
在Codeplex上的Expression Blend Samples项目可能会有所帮助:
例如:Expression Blend Samples
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <si:InvokeDataCommand Command="{Binding Command}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

2
一种可能的方法是使用我创建的这个代码片段,通过附加行为将命令与事件连接起来。
希望这可以帮到您。
谢谢, Damian

1

我是 Damian 回答的粉丝,通常会使用那个解决方案。

另一种常见做法是在 Blend 中使用 InvokeCommandAction 或类似的行为。


如果你喜欢他的回答,为什么不给他点赞?那就是这个网站的应有之义。 - Josh Stodola

0

也许这并不是正确的方法,但对我来说它有效。

视图:

<UserControl Tag="{Binding InitializeMyUserControl}">

视图模型:

public object InitializeMyUserControl
{
    get
    {
        // do some initialization in here
        // bla bla bla
        .. 

        return null;
    }
}

当UserControl加载时,它将尝试获取标记值。在那里,您可以初始化事物。


0
不确定这是否是最佳实践,但在ViewModel类中仅仅使用一个构造函数对我来说已经足够好了...
namespace App.ViewModels
{
    public class Main : INotifyPropertyChanged
    {

        public Main()
        {
            // Onload code here
        }

@HiTech 你熟悉MVVM吗?我的XAML的代码后台很简单。 - Josh Stodola
糟糕,我的错误。将很快删除评论,因为它们没有添加任何价值。 - iCollect.it Ltd

0

我刚刚发现使用Unloaded事件可能会导致内存泄漏,因此已经回归到老式的Loaded事件。为了检查这个问题,您可以在您的用户控件/页面中添加一个终结器,并确保在执行GC.Collect()时它被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接