C# 使用MVVM时,如何从ViewModel中访问视图成员?

C# 使用MVVM时,如何从ViewModel中访问视图成员?,c#,wpf,xaml,mvvm,win-universal-app,C#,Wpf,Xaml,Mvvm,Win Universal App,我在网上搜索过,还没有找到对这个简单问题的任何直接解释 我有一个正在开发的UWP应用程序,我只需要知道如何访问位于视图XAML中的网格元素或Textblock元素。我遇到的每一篇文章都是关于数据绑定的。我不想绑定数据。我只是想得到那些位于我视图中的元素,以便我可以操纵它们 例如,我遇到的一个主要问题是找到一种MVVM方法来从我的ViewModel中操作RichEditBox。这个特殊的控件不能完全通过XAML操作,需要使用代码 是的,基本上,我如何从ViewModel中获取对这些对象的引用?MV

我在网上搜索过,还没有找到对这个简单问题的任何直接解释

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

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


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

MVVM的全部目的是分离视图和视图模型


如果视图模型中的数据绑定无法执行某些操作,则始终可以将代码放入表单的代码隐藏中

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

    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);
    }
}

您需要首先了解更多关于MVVM的信息。MVVM背后的思想是将视图(ui)与视图模型(表示逻辑)分开。也就是说,ViewModel不知道视图中发生的任何事情,所以答案是:根本不知道。您有命令和应通知属性,这就是您用来与视图通信的内容。您还可以使用其他工具来解决此问题,如附加属性。附加的属性可以附加到XAML中的用户控件,您可以将属性或命令绑定到该控件。如果您有足够复杂的通用解决方案,则可以创建用户控件。在用户控件中,您可以使用代码隐藏所有需要的逻辑,然后公开依赖项属性以将命令和属性绑定到它。有关用户控件和代码隐藏的类似问题,请参见我的答案
View.FindName("YourControlName") as YourControlType;