我有一个进度条结合到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