2010-12-08 34 views
0

En silverlight 3 Je suis en train de faire quelque chose comme:Silverlight 3 AutocompleteBox.text est pas mis à jour

//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; 
} 

de sorte que le premier La valeur de la saisie semi-automatique est "1". si driverNums = 1 alors le fichier autocompletebox.text est 2 .. ce qui est correct mais si driverNums = 2 alors le fichier autocompletebox.text est 2 .. ce qui est faux.

J'ai modifié le champ de texte de saisie semi-automatique dans un tableau, mais cela n'est pas mis à jour correctement. Est-ce que quelqu'un sait comment résoudre ce problème?

Chose étrange est si je vérifie la variable testString, la valeur est correcte ..

Répondre

1

Cela semble être un problème connu. Voir http://forums.silverlight.net/forums/p/199616/519232.aspx

Une solution qui a fonctionné dans mon application est d'effacer la propriété Text, puis le mettre à nouveau en utilisant Dispatcher.BeginInvoke, à savoir quelque chose comme ceci:

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

Je ne l'ai fait dans un scénario donc je ne sais pas si ça va marcher pour vous. Mon application utilisait aussi des bindings (j'ai appelé ClearValue puis SetBinding).

+0

Cela a parfaitement fonctionné pour moi. Merci dcstraw. – kmk

0

Vous devez utiliser la méthode "ValueMemberBrinding"

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