我在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