使用MVVM时如何从ViewModel中访问View成员?

问题描述 投票:1回答:2

我在网上搜索过,并没有直接解释这个简单的问题......

我有一个我正在研究的UWP应用程序,我只需要知道如何访问位于View的XAML中的Grid元素或Textblock元素。我遇到的每篇文章都严格关注数据绑定。我不打算绑定数据。我只是想抓住我视图中的那些元素,以便我可以操纵它们。

我遇到的一个主要问题是找到一种MVVM方法来处理我的ViewModel中的RichEditBox。这个特定的控件不能通过XAML完全操作,并且需要使用代码。

所以是的,基本上,我如何从ViewModel获取对这些对象的引用?

c# wpf xaml mvvm win-universal-app
2个回答
5
投票

MVVM的重点是分离视图和视图模型。

如果您无法从视图模型中进行数据绑定,则可以始终将代码放在表单的代码中。


0
投票

有时您不能严格并且仅使用MVVM模式,在某些情况下,您需要在使用第三方组件时操纵View元素。对于这种情况,例如使用LightMVVM for UWP。在实例化ViewModel时,您可以传递对View的引用,最好的方法是使用一种依赖注入,不过,这里有一些实现建议:

    public abstract class BaseViewModel<TPage> 
    where TPage : class
{
    public TPage View { get; private set; }
    ///this is a method but it could be a constructor as well..
    public TViewModel SetupParentPage<TViewModel>(TPage p)
        where TViewModel : class
    {
        if (View == null)
        {
            View = p;                                       
        }
        return (this as TViewModel);
    }
}

现在你要做的是从BaseViewModel继承你的ViewModel

然后,您可以使用以下方法访问页面的控件:

View.FindName("YourControlName") as YourControlType;
© www.soinside.com 2019 - 2024. All rights reserved.