2010-12-08 30 views
0

在Silverlight 3,我做這樣的事情:Silverlight 3的AutocompleteBox.text不更新

//currentDataForm.itemssource = currentCollisionDisplay; 
//<input:AutoCompleteBox Width="74" x:Name="InvolvedCnt" Text="{Binding involvedCnt, Mode=TwoWay}" 

...

for (int i = 0; i < driverNums; i++) 
    { 
     AddCollisionVehicle_Click(null, null); 
    }     

...

private void AddCollisionVehicle_Click(object sender, RoutedEventArgs e) 
{ 
currentCollisionDisplay.involvedCnt ++; 
(df_collision.FindNameInContent("InvolvedCnt") as AutoCompleteBox).Text = currentCollisionDisplay.involvedCnt.ToString(); 
(df_collision.FindNameInContent("InvolvedCnt") as AutoCompleteBox).UpdateLayout(); 
string testString = (df_collision.FindNameInContent("InvolvedCnt") as AutoCompleteBox).Text; 
} 

所以最初的自動完成框的值是「1」。 如果driverNums = 1,那麼autocompletebox.text是2 ..這是正確的 但如果driverNums = 2那麼autocompletebox.text是2 ..這是錯誤的。

我改變了數組中的autocompletebox文本字段,但這不是正確更新..有沒有人知道如何解決這個問題?

奇怪的是,如果我檢查的TestString變量,該值是正確的..

回答

1

這似乎是一個已知的問題。見http://forums.silverlight.net/forums/p/199616/519232.aspx

,在我的應用程序的工作是清除出Text屬性,然後使用Dispatcher.BeginInvoke,即這樣的事情再次設定一個解決辦法:

autoCompleteBox.Text = null; 
Dispatcher.BeginInvoke(() => 
    autoCompleteBox.Text = currentCollisionDisplay.involvedCnt.ToString()); 

我在一個只有做到了這一點所以我不確定它是否適合你。我的應用程序也使用綁定(我稱爲ClearValue,然後SetBinding)。

+0

這非常適合我。感謝dcstraw。 – kmk 2011-10-05 15:38:06

0

您需要使用方法 「ValueMemberBrinding」

<toolkit:AutoCompleteBox x:Name="InvolvedCnt" ValueMemberBinding="{Binding Name}"/>