【问题标题】:Slider control shows abnormal behaviour on {Binding} with TextBlock滑块控件在带有 TextBlock 的 {Binding} 上显示异常行为
【发布时间】:2013-05-13 01:54:02
【问题描述】:

对不起,如果标题很奇怪,因为问题本身有点奇怪。

我在客户端有一个 TextBlock 和滑块控件。

滑块 {Binding} 到 Textblock。

这是他们的代码 -

 <TextBlock Text="{Binding Value}" x:Name="Name1Value" FontSize="25"/>
  <Slider   ValueChanged="slider_ValueChanged_1"  x:Name="slidervalve"  Value= "{Binding ElementName=Name1Value,Path=Text}"  StepFrequency="25"   />

现在当 Slider Value 改变时,Slider 调用一个方法slider_ValueChanged_1,将它的值发送到服务器。服务器接受该值并将新值发送回客户端,并且来自服务器的这个新值通过实现 inotifypropertychanged 的​​ observablecollection 设置为文本块(x:Name="Name1Value")。滑块 {Binding} 到文本块。

1) 现在我第一次更改客户端滑块上的值时,服务器接受新值并返回新值,我将新值设置为文本块。 2)现在我正在更改服务器上的值,并且该值在文本块中正确更新,然后滑块值更改为文本块值。

3) 现在在第一个循环之后,如果我再次更改服务器上的值,客户端上的文本块正在更新,但滑块不会更改为文本块值

但滑块绑定到文本块。我该如何解决这个问题?

Edit1:仅供参考,文本块和滑块在同一页面但在不同的堆栈面板中

【问题讨论】:

  • 这看起来很混乱,如果不是递归的话,这里用户体验的实际目标是什么。听起来您想使用滑块设置一个值,但通过服务器上设置的值覆盖该值?因此,如果我更改滑块,我不会看到我离开它的滑块,但它会根据服务器返回的内容为我重置(好吧,假设你试图连接在一起的东西有效?)我'不确定我明白你为什么在这种情况下使用元素绑定?
  • @JimO'Neil 当客户端用户更改滑块时,滑块会立即更新,然后等待服务器接受滑块的新值。当服务器接受该值时,文本块被更新并且滑块(绑定到文本块)保持其新位置。但是在第一次递归之后,文本块仍然可以正常更新,但滑块停止更新到文本块的值,即使它的 {Binding} 。这里的商业案例是,当用户更改滑块值时,服务器应该接受新值。否则滑块回到之前的位置。

标签: xaml windows-8 windows-runtime winrt-xaml


【解决方案1】:

Slider 控件的Value 属性是double 类型,而TextBlock.Text 是一个字符串。在没有转换器的情况下将这两者绑定在一起是自找麻烦。您应该将Slider.Value 绑定到DataContext/view 模型,并且通常确保绑定Mode=TwoWay

【讨论】:

  • 感谢您的回复。我已经在 cmets 中解释了我上面的业务案例。关于您的第二个建议,我无法将 Binding Mode=Two way 设置为数据上下文,因为滑块值在其值和数据上下文值 [以前接受的服务器值] 之间剧烈振荡服务器接受值并发送响应的过渡时间。您还可以给我一个在线示例,说明如何使用转换器将 Slider 绑定到 texblock 文本。
  • 我只是在这里用转换器示例回答您的一个问题,stackoverflow.com/questions/16519272/…。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2020-09-08
  • 2012-08-24
  • 2016-02-29
相关资源
最近更新 更多