2013-05-13 22 views
0

對不起,如果標題很奇怪,因爲問題本身有點奇怪。Slider控件在TextBlock的{Binding}上顯示異常行爲

我在Clientside上有一個TextBlock和Slider控件。

滑塊是{綁定}到文本塊。

這是他們的代碼 -

<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_ValueChanged_1,這將其值設置爲服務器。服務器接受該值並將新值發送回客戶端,並通過inotifypropertychanged實現的可觀察集合將來自服務器的這個新值設置爲textblock(x:Name =「Name1Value」)。滑塊是{綁定}文本塊。

1)現在我第一次在客戶端更改滑塊上的值,服務器接受新值並返回新值,我將新值設置爲文本塊。 2)現在我正在更改服務器上的值,並且正確更新文本塊中的值,然後滑塊值更改爲文本塊值。

3)現在在第一次循環後,如果我再次更改服務器上的值,客戶端上的文本塊將得到更新,但滑塊不會更改爲文本塊值

但滑塊綁定到文本塊。我該如何解決這個問題?

EDIT1:僅供參考,正文塊和滑塊都在同一個頁面,但在不同stackpanels

+0

這似乎很混亂,如果不是遞歸的,這裏用戶體驗的實際目標是什麼。這聽起來像你想使用滑塊來設置一個值,但通過在服務器上設置的值覆蓋該值?所以如果我改變滑塊,我不會看到我離開它的滑塊,但它會根據服務器返回的東西重新設置(假設你正在嘗試連接到一起的作品?)我不知道爲什麼你在這種情況下使用元素綁定呢? – 2013-05-13 05:12:54

+0

@ JimO'Neil當用戶在客戶端更改滑塊時,滑塊會立即更新,然後等待服務器接受滑塊的新值。當服務器接受該值時,文本塊被更新,滑塊(綁定到文本塊)保持其新的位置。但是在第一次遞歸之後,textblock仍然得到更新,但滑塊停止更新爲文本塊的值,即使其{Binding}。這裏的商業案例是,當用戶更改滑塊值時,服務器應接受新值。否則,滑塊可以回到以前的位置。 – 2013-05-13 08:26:58

回答

0

一個Slider控制的Value屬性爲double型的,而TextBlock.Text是一個字符串。將這兩者綁定在一起而不使用轉換器就會造成麻煩。您應該將Slider.Value綁定到DataContext/view模型,並通常確保綁定Mode=TwoWay

+0

感謝您的回覆。我已經在註釋中解釋了上述商業案例。關於第二條建議,我無法設置綁定模式=數據上下文的兩種方式,因爲滑塊值在其值和數據上下文值[以前接受的服務器值]之間劇烈振盪服務器接受該值併發送響應的臨時時間。你也可以請給我一個在線例子,說明如何將Slider綁定到帶轉換器的texblock文本。 – 2013-05-13 09:04:34

+0

我只是用這裏的轉換器示例回答你的問題之一,http://stackoverflow.com/questions/16519272/slider-control-and-textblock-control-interaction-metro-apps。希望能幫助到你。 – kimsk 2013-05-13 19:22:36