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