2010-07-22 45 views
3

我有一個進度條結合到2的整數值 - 一個是總秒,另一種是離開秒(進行計數,將其放在定時器:總是< =總秒數)。可能的數據綁定錯誤時的datacontext改變(Silverlight的4)

我有LayoutRoot的DataContext設置爲我的頂層對象(其中BlindSet是一個屬性 - 見代碼)。

當我運行項目時,進度條完全更新。它按預期的秒數倒計時。然後通過實例化一個新對象並將其設置爲BlindSet類來更改數據上下文。我使用DataChanged通知事件讓UI知道它已經改變。這也適用於所有其他控件,除了進度條之外,還應相應更新。

它讓我百思不得其解,所以我簡化它歸結爲這樣:

2的TextBlocks和進度條,所有綁定到相同的值。 datacontext設置得更高,所以它們都是相同的。

文本塊顯示正確的倒計時值。 (BlindSet.TimeLeftInCurrentBlind.TotalSeconds在一個計時器上倒數),但是在我更改datacontext後進度條從不再更新。我甚至在datacontext更改後嘗試重新綁定它,但這並沒有幫助。

我還將進度條上的工具提示綁定爲與值設置爲相同的值 - 當您將鼠標懸停在非更新進度條上時,您可以看到它正確倒計數......但進度條沒有展示下。

我正在做一些非常愚蠢的事情(可能;)或者它是進度條控件中的一個錯誤。

XAML:

<TextBlock Text="{Binding BlindSet.CurrentBlind.SecondsPerBlind}" /> 
<TextBlock Text="{Binding BlindSet.TimeLeftInCurrentBlind.TotalSeconds}" /> 

<ProgressBar Minimum="0" Maximum="{Binding BlindSet.CurrentBlind.SecondsPerBlind}" Value="{Binding BlindSet.TimeLeftInCurrentBlind.TotalSeconds}" ToolTipService.ToolTip="{Binding BlindSet.TimeLeftInCurrentBlind.SecondsPerBlind}" /> 

後面的代碼:

LayoutRoot.DataContext = tournament; 

比賽有BlindSet對象,但我不認爲這是問題,因爲其他控件的一部分正在更新罰款:

public Blindset BlindSet 
    { 
     get { return blindset; } 
     set 
     { 
      if (blindset != value) 
      { 
       blindset = value; 
       OnPropertyChanged("BlindSet"); 
       OnPropertyChanged("CurrentBlind"); 
      } 
     } 
    } 

更新:也許有一些內部當數據上下文改變時(值非常不同,例如1200秒或120秒),需要使用新的最大值和值來重新初始化最終狀態。

當我綁定到具有相同值(即1200秒)的新BlindSet對象時,它按預期工作 - 所以我認爲我需要以某種方式重新計算小值或大值更改 - 任何想法怎麼樣?!

回答

2

我剛剛在blog article的註釋部分閱讀此,我希望它能幫助。

只是讓大家都知道。 ProgressBar(至少從Silverlight 3到2009年9月)在數據綁定方面效果不佳。它只是部分工作。所以你可能想在你的設計中考慮這個問題,直到它被修復。
1)不能首先更改爲空而不更改DataContext。因此,繼承綁定通常不起作用。
2)可視性不能數據綁定。(你可以嘗試,但它始終工作,如果你已經設置模式=一次性)
3)其他綁定似乎並不總是穩定要麼...
希望幫助別人避免挫折感。

+0

好,謝謝,最後我創造了它編程,並且每個DataContext的需要改變時重新創建它。 – Rodney 2010-07-23 08:14:50

0

好吧,假設你的對象實施INotifyPropertyChanged的,你必須要指出,「公共Blindset BlindSet」,並且在每一個「BlindSet」實例的屬性正在發生變化......難道我糾正你還需要使用雙向進行裝訂,還是我想輸入值的?


要作出這樣的方式更清晰......每個上BlindSet.CurrentBlind。{財產這裏}屬性需要宣佈,它已chanaged以及和BlindSet.CurrentBlind屬性需要宣佈它改變。

+0

感謝理查德,但我告知新changes-綁定到相同的值更新精細其他控件的UI。這是值得的進度條。 – Rodney 2010-07-23 08:14:23

相關問題