2010-12-08 59 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}"/>