在mvvm中我们可以从view中调用viewmodel的方法吗?

时间:2011-03-16 09:49:50

标签: silverlight mvvm

我正在尝试在我的viewmodels中检索uri参数。我尝试了几件事,但没有任何工作按预期...我想模仿OnNavigatedTo和OnNavigatedFrom Page的方法,所以我写道:

在我的ViewBase类中(从Page继承):


public ViewModelBase ViewModel
{
    get { return this.DataContext as ViewModelBase; }
    protected set
    {
        if (value != this.DataContext)
        {
            this.DataContext = value;
        }
    }
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);
    this.ViewModel.OnNavigatedFrom(e.Uri);
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    this.ViewModel.OnNavigatedTo(e.Uri);
}

并在我的ViewModelBase类中:


public virtual void OnNavigatedFrom(Uri uri)
{
}

public virtual void OnNavigatedTo(Uri uri)
{
}

如果我这样做有什么问题?

提前致谢...

1 个答案:

答案 0 :(得分:2)

通常在MVVM中,您可以使用某种形式的命令或许多MVVM框架提供的替代方法。我会认真考虑使用MVVM框架,例如PrismMVVM Light ToolkitCaliburn.Micro。它们都有自己的机制,可以从视图中调用视图模型上的动词。