1

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

4

2 回答 2

2

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

  • “代理” WinRT 对象,并使该代理侦听来自 WinRT 对象的事件并设置属性
  • 制作一些看起来像可观察并从 WinRT 层投射出来的东西(例如,它有一个接受回调等的“绑定”函数)。
于 2012-10-17T16:13:57.587 回答
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 成员(也包含它们的值)。

于 2013-05-09T23:42:10.010 回答