我在WPF中有一个列表框,其中显示了多个工作线程的状态。显示屏中包含进度条。将事件处理程序附加到数据模板中的控件
事实证明,进度条有一个问题(缺陷?):“最大”值是一个依赖项属性,但当此属性更改时,进度条不会更新。
有人在this question上遇到了类似的问题。建议的解决方案是在处理依赖项属性更改的进度栏中添加一个处理程序。
但我的进度条是由WPF框架通过数据模板创建的。 (请参阅下面的代码)如何将处理程序附加到这些动态创建的进度栏?
或者,有没有另一种方法来解决这个问题?
<DataTemplate x:Key="DataTemplateTransferWorker">
<Border Style="{StaticResource TransferWorker}" Height="Auto">
<StackPanel Orientation="Vertical">
<TextBlock Style="{StaticResource ItemHeader}">Transfer Worker</TextBlock>
<TextBlock Style="{StaticResource FieldValue}" Text="{Binding StatusDescription}" />
<!-- Note that the maximum comes from a changing property. -->
<ProgressBar
Margin="6, 3, 6, 3"
Height="12"
Orientation="Horizontal"
Background="Transparent"
Maximum="{Binding ServerJob.FileSize, Mode=OneWay}"
Value="{Binding BytesUploaded, Mode=OneWay}" />
后来编辑
事实证明,它不是简单的最大结合值被打破,因为有工作的例子,其中的进度条动态更新得很好。
这不是一个INotifyPropertyChanged问题。我正在通知ServerJob属性的任何更改(但不是ServerJob.FileSize属性,它对于每个服务器作业都是不变的)。我还在ServerJob.FileSize.get上放置了一个断点,并且该框架的确在查询响应中的文件大小到物业更改通知。
我还向控件添加了两个TextBlocks,分别绑定到ServerJob.FileSize和BytesUploaded。并且他们完全按照他们应该的更新。
但由于某些原因,只要BytesUploaded值变为非零,进度条就会缩小至100%。
我已经通过添加新的属性“PercentageComplete”,它计算的进度解决问题的工作,而且这样我可以在100
这很奇怪 - 我*可以*通过更改'Maximum'绑定的值更新进度条。你是否在提升PropertyChanged?你使用的是什么.NET版本? – 2011-03-29 03:45:29
如果您想要查看它,可以下载我的测试项目 - https://docs.google.com/leaf?id=0BxSAZ9JlU2w9ZmUzZGE0OGEtYTk3Yy00NWEzLWJjYTktMmQzOTY4YzY4ZGYz&hl=zh-CN。 – 2011-03-29 03:47:37
@Andrew可能你只是在你的绑定中有一个错字 - 我假设正确的绑定路径可能是ServerJob.FileSize而不是SeverJob.FileSize。 – 2011-03-29 08:04:46