2010-07-22 30 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

相关问题