WindowsPhone CreateBindingSet测试

时间:2014-02-22 22:18:44

标签: mvvmcross

我现在正在从我的xaml dp绑定后面的代码转移到使用CreateBindingSet,因为我相信从长远来看它会更容易维护。以前确认我没有错过任何绑定,我有一个带有通用测试例程的Windows Phone测试项目 - 它将解析所有控件的视图,并确认每个控件都有正确的绑定。我是用

做的
    element.GetBindingExpression(dependencyProperty) // from System.Windows

这很有效 - 验证了我的所有观点。

但是现在我正在改变,所有这些测试都失败了。有没有人建议我如何使用CreateBindingSet和.Apply应用绑定时测试相同的东西。

提前致谢。

拉​​纳

疯狂背后的推理

作为一个懒惰的草皮,我梦想有一天我的视图将在所有平台上共享;在那之前,以下情况会做(我已经到位并且正常工作)

将在所有平台之间共享的BoilerPlate类:

#if __IOS
    ... needed namespaces
#else ....

public partial class FirstView
{
    private new FirstViewModel ViewModel
    {
    get { return (FirstViewModel)base.ViewModel; }
    }

    private void CommonBinding()
    {
        var set = this.CreateBindingSet<FirstView, FirstViewModel>();

        // do common bindings
        set.Bind(PageText).For(c => c.Text).To(vm => vm.PageText).OneTime();

        set.Apply();
    }
}

然后View in Touch将是:

public partial class FirstView : MvxViewController
{
    public override void LoadView()
    {
        // create
    }

    public override ViewDidLoad()
    {
        CommonBinding();
    }
}

理论上,其他平台的观点几乎相似;只是不同的继承(MvxActivity with OnCreate和OnViewModelSet)/(MvxPhonePage with xaml / alternative,以及Loaded Event for binding)。

最后,一种常见的测试方法,以确保所有项目都以某种方式设置绑定。在我看来,在wp8支持自动视图之前,它只是拥有尽可能多的共享代码的方式。

我刚开始使用droid,并尝试使布局与xibFree兼容,我已经在触控项目中使用了xibFree。如果这样有效,我可以在droid和touch之间共享布局(或许我应该看看autoView)

1 个答案:

答案 0 :(得分:0)

我个人不确定这些测试为您的应用程序增加了多少价值 - 这些感觉就像他们在&#34;复制代码&#34;而不是实际测试任何功能。

然而,这很大程度上取决于个人意见,如果您确实需要这种级别的测试,那么我认为您可以通过以下方式实现:

  1. https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.BindingEx.WindowsPhone/WindowsBinding/MvxWindowsBindingCreator.cs
  2. 继承课程
  3. 覆盖ApplyBinding,以便您可以在测试时捕获为每个元素进行的调用
  4. 使用ioc作为测试工具中的IMvxBindingCreator注册此课程
  5. 在测试中使用捕获的绑定请求列表