Bonjour a tous , Je tente d’effacer le contenu d’une listbox WPF lors du clic sur un boutton .. hier j’avais un code qui marchait parfaitement et ce matin je me tappe des InvalidOperationException.
J’ai deja rencontré cette exception lorsque je tentais de modifier une liste sur laquelle je loopais .. mais dans ce cas ci ce n’est pas le cas ..
Voici le code fautif ..
private void Button_ShowViews_Click(object sender, RoutedEventArgs e)
{
// Nothing selected
if (lb_Selection.SelectedItems.Count == 0)
return;
var selectedProjects = GetSelectedProjects();
lb_Selection.Items.Clear(); // InvalidOperationException .. pourtant ma liste n'est pas en utilisation ici ..
foreach (var project in selectedProjects)
{
AddViewsToSelectionListbox(project);
}
CurrentView = VIEWS_VIEW;
UpdateButtons();
UpdateSelectionList();
}
Si je remplace la ligne fautive par un lb_Selection.ItemsSource = new List<object>(); Ca passe pour la , mais la fonction qui suit ( AddViewsToSelectionListBox ) lance la meme exception au moment d’apeller .Add pour un element ..
Le plus étrange est que sur le click d’un autre bouton , je fais sensiblement les memes operations ..
// connect button click ..
private void Button_Connect_Click(object sender, RoutedEventArgs e)
{
bool isConnected = StarteamHelper.Connect(mServerUrl, mPort, mUsername, mPassword);
if (isConnected)
{
FillSelectionListboxWithProjects();
}
}
// Fill selection listbox with project
private void FillSelectionListboxWithProjects()
{
lb_Selection.Items.Clear(); // No Exception here
var projects = StarteamHelper.GetProjectList();
lb_Selection.ItemsSource = projects;
}
La seule différence entre les codes est que dans un cas je recupere la liste d’item d’une autre classe , et dans le cas de l’exception , je recuperere les items de la liste elle meme ..
De plus je peut transformer le code du ShowViews en .. et ca fonctionne toujours pas ..
private void Button_ShowViews_Click(object sender, RoutedEventArgs e)
{
lb_Selection.Items.Clear(); // Still an exception
}
J’ai pu regler en faisant .. :
var new_list = new List<object>();
new_list.Add(VIEW_LIST_TAG);
selectedProjects.ForEach(project => {
new_list.Add(PROJECT_PREFIX + project.Name);
StarteamHelper.GetViewsFromProject(project).ForEach(view => { new_list.Add(view); });
});
lb_Selection.ItemsSource = new_list;
MAis je ne comprend toujours pas pourquoi dans certains cas je peut utiliser Clear/Add et d’autre gois changer la source ..
Merci d’avance pour votre aide ! -Z-