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