将WinJS绑定到WinRT对象

时间:2012-10-17 16:07:27

标签: windows-8 windows-runtime winjs

我们正在编写Windows应用商店应用。许多数据处理和聚合是在WinRT组件中完成的,UI是用WinJS / HTML编写的。我们遇到的主要问题之一是WinJS无法绑定到WinRT对象。具体来说,WinJS运行时抛出一个异常,它无法扩展WinRT对象。这是一行代码,试图在数据对象上定义一个新属性。这适用于WinJS对象,因为它们是动态的。 WinRT不是这样。我可以绑定的唯一方法是通过oneTime绑定,因为这不会尝试从WinRT对象中创建一个Observable对象。 WinRT对象可以实现某种接口以支持单向甚至双向绑定吗?

2 个答案:

答案 0 :(得分:2)

不,如果没有创建自己的包装器,这是不可能的:

  • “代理”WinRT对象,并使该代理侦听来自WinRT对象的事件并设置属性
  • 创建看起来的东西,就像一个可观察的东西,并从WinRT层投射出来(例如它有一个带有回调等的“绑定”功能。

答案 1 :(得分:2)

我不需要担心双向绑定,但下面描述的类似代码对我来说很有用。注意:请不要遵循显示的JS方法命名约定。

C#

public sealed class Stock
{
   //... other private/internal methods/members
   private String _symbol;

   public string Symbol
   {
       get
       {
           return this._symbol;
       }
   }
}

JS

_makeBindable: function (obj) {
    var o = new Object();
    for (m in obj) {
        o[m] = obj[m];
    }
    return o;
}

var projectedStockObj = getStockObjFromWinRTComponent();
var bindableStockObj = _makeBindable(projectedStockObj);
// ... use bindableStockObj in binding scenario(s)

此解决方案创建一个新对象并将WinRT成员添加到其中(也包含其值)。