我有一個進度條結合到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對象時,它按預期工作 - 所以我認爲我需要以某種方式重新計算小值或大值更改 - 任何想法怎麼樣?!
好,謝謝,最後我創造了它編程,並且每個DataContext的需要改變時重新創建它。 – Rodney 2010-07-23 08:14:50