XAML绑定到不可变结构

时间:2012-11-26 08:07:35

标签: c# xaml data-binding windows-8

我的Windows 8应用中有一些DownloadOperation。 DownloadOperation的属性Progress包含StatusTotalBytesToReceiveBytesReceived。我尝试将数据绑定到我的XAML标记中的那些,但我得到了some errors。然后我发现绑定到BackgroundDownlodProgress的结构是不可能的。 我在网上找到的唯一解决方案是使结构可变,这对我来说是不可能的,因为它不是我的代码。

我尝试将DownloadOperation包装到一个Wrapper类中,该类具有DownloadOperation.Progress.Status,DownloadOperation.Progress.BytesReceived和DownloadOperation.Progress.TotalBytesToReceive的类属性。

我必须通过系统通知ord中的属性更改来更新UI中的值,通常这是在属性的setter方法中完成的。我没有setter,因为底层结构是只读的。

如何创建与系统定义的不可变结构的XAML绑定?

1 个答案:

答案 0 :(得分:4)

DownloadOperation有一个名为“AttachAsync”的方法,它返回一个类型为“IAsyncOperationWithProgress<DownloadOperation, DownloadOperation>”的对象。您可以使用此返回值添加处理进度事件的方法。每次调用此进度方法时,您都可以通知UI,进度属性已更改。它应该是这样的:

var operationWithProgress = download.AttachAsync();
operationWithProgress.Progress = (asyncInfo, progressInfo) => {
    //send notify property changed events
}

免责声明:我没有尝试使用此解决方案运行程序,我只是在搜索文档。如果您对此解决方案有任何问题,请发表评论。