我在通用应用程序中使用Caliburn Micro beta。我尝试在OnViewLoaded方法中访问我的页面上的控件。但是我得到一个例外,即由于其保护级别,控件无法访问。我在XAML中没有看到任何指定要保护的控件的内容。不知道如何解决它。有任何想法吗?我正在使用以下代码 -
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
MyView myView = view as MyView;
if (MyView != null)
{
TextBlock tb=MyView.MyTextBlock;
}
}
答案 0 :(得分:0)
这在WPF中起作用的原因是生成的xaml代码将控件引用创建为internal
,在Windows 10中它们生成为private
。
然而,正如上述评论所暗示的那样,这通常不是您想要在MVVM风格应用程序中执行的方法。
一种方法是创建视图实现的接口ICustomerView
(例如)。此视图界面上的方法直接与控件交互(并且可以因为它是访问私有控件引用)。
在OnViewLoaded
中,您可以将视图转换为界面并保留对该界面的引用。
这使您仍然可以通过一个接口与视图进行交互,该接口将视图与视图模型分离,并且仍然允许进行单元测试。
修改:您可以在this repository中看到一个示例,其中视图继承自实现ViewBase
的{{1}},后者公开了一种更改视觉状态的方法。