我在网上搜索过,并没有直接解释这个简单的问题......
我有一个我正在研究的UWP应用程序,我只需要知道如何访问位于View的XAML中的Grid元素或Textblock元素。我遇到的每篇文章都严格关注数据绑定。我不打算绑定数据。我只是想抓住我视图中的那些元素,以便我可以操纵它们。
我遇到的一个主要问题是找到一种MVVM方法来处理我的ViewModel中的RichEditBox。这个特定的控件不能通过XAML完全操作,并且需要使用代码。
所以是的,基本上,我如何从ViewModel获取对这些对象的引用?
MVVM的重点是分离视图和视图模型。
如果您无法从视图模型中进行数据绑定,则可以始终将代码放在表单的代码中。
有时您不能严格并且仅使用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;