参考Universal App中的视图

时间:2014-07-21 18:03:37

标签: caliburn.micro

我在通用应用程序中使用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;
        }

    }

1 个答案:

答案 0 :(得分:0)

这在WPF中起作用的原因是生成的xaml代码将控件引用创建为internal,在Windows 10中它们生成为private

然而,正如上述评论所暗示的那样,这通常不是您想要在MVVM风格应用程序中执行的方法。

一种方法是创建视图实现的接口ICustomerView(例如)。此视图界面上的方法直接与控件交互(并且可以因为它是访问私有控件引用)。

OnViewLoaded中,您可以将视图转换为界面并保留对该界面的引用。

这使您仍然可以通过一个接口与视图进行交互,该接口将视图与视图模型分离,并且仍然允许进行单元测试。

修改:您可以在this repository中看到一个示例,其中视图继承自实现ViewBase的{​​{1}},后者公开了一种更改视觉状态的方法。