Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2019-08-26T17:07:22+02:00Les derniers messages parus sur le forum de Zeste de Savoir.WPF - Listbox - Clear()/Add(), message #2078482019-08-26T17:07:22+02:00Zérotisme/@Z%C3%A9rotismehttps://zestedesavoir.com/forums/sujet/12896/wpf-listbox-clearadd/?page=1#p207848<figure><blockquote>
<p>Bonjour Zérotisme,</p>
<p>J’ai l’impression que tu captures l’événement clic <code>Button_ShowViews_Click</code> sur un élément de la liste que tu essayes de vider. Pour lui ça rentre en conflit avec l’objet <strong>sender</strong> envoyé à ta fonction.</p>
<p>La solution ce serait d’exécuter une fonction asynchrone. Je n’ai pas le contexte et l’interface de ton application, si tu ne trouves toujours pas ce serait bien que tu postes un screenshot avec tes éléments d’interfaces ; histoire que l’on comprenne les bouts & les aboutissants.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12896/wpf-listbox-clearadd/?page=1#p207703">Yarflam</a></figcaption></figure>
<p>Merci de ta reponse , </p>
<p>En fait , lorsqu’on utilise ListBox.ItemSource = new_source; l’attribut ListBox.Items deviens en lecture seul.</p>
<p>Je m’en suis sorti en creant une nouvelle liste a chaque changements et en l’affectant a ListBox.ItemsSource. ( ce qui selon plusieurs forum , est la bonne pratique avec les lb )</p>WPF - Listbox - Clear()/Add(), message #2077032019-08-22T19:27:13+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/12896/wpf-listbox-clearadd/?page=1#p207703<p>Bonjour Zérotisme,</p>
<p>J’ai l’impression que tu captures l’événement clic <code>Button_ShowViews_Click</code> sur un élément de la liste que tu essayes de vider. Pour lui ça rentre en conflit avec l’objet <strong>sender</strong> envoyé à ta fonction.</p>
<p>La solution ce serait d’exécuter une fonction asynchrone. Je n’ai pas le contexte et l’interface de ton application, si tu ne trouves toujours pas ce serait bien que tu postes un screenshot avec tes éléments d’interfaces ; histoire que l’on comprenne les bouts & les aboutissants.</p>WPF - Listbox - Clear()/Add(), message #2076132019-08-21T15:55:48+02:00Zérotisme/@Z%C3%A9rotismehttps://zestedesavoir.com/forums/sujet/12896/wpf-listbox-clearadd/?page=1#p207613<p>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.</p>
<p>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 ..</p>
<p>Voici le code fautif ..</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-csharp"><span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Button_ShowViews_Click</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, RoutedEventArgs e</span>)</span>
{
<span class="hljs-comment">// Nothing selected</span>
<span class="hljs-keyword">if</span> (lb_Selection.SelectedItems.Count == <span class="hljs-number">0</span>)
<span class="hljs-keyword">return</span>;
<span class="hljs-keyword">var</span> selectedProjects = GetSelectedProjects();
lb_Selection.Items.Clear(); <span class="hljs-comment">// InvalidOperationException .. pourtant ma liste n'est pas en utilisation ici ..</span>
<span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> project <span class="hljs-keyword">in</span> selectedProjects)
{
AddViewsToSelectionListbox(project);
}
CurrentView = VIEWS_VIEW;
UpdateButtons();
UpdateSelectionList();
}
</code></pre></div>
<p>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 ..</p>
<p>Le plus étrange est que sur le click d’un autre bouton , je fais sensiblement les memes operations ..</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-csharp"><span class="hljs-comment">// connect button click ..</span>
<span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Button_Connect_Click</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, RoutedEventArgs e</span>)</span>
{
<span class="hljs-keyword">bool</span> isConnected = StarteamHelper.Connect(mServerUrl, mPort, mUsername, mPassword);
<span class="hljs-keyword">if</span> (isConnected)
{
FillSelectionListboxWithProjects();
}
}
<span class="hljs-comment">// Fill selection listbox with project</span>
<span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">FillSelectionListboxWithProjects</span>(<span class="hljs-params"></span>)</span>
{
lb_Selection.Items.Clear(); <span class="hljs-comment">// No Exception here</span>
<span class="hljs-keyword">var</span> projects = StarteamHelper.GetProjectList();
lb_Selection.ItemsSource = projects;
}
</code></pre></div>
<p>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 ..</p>
<p>De plus je peut transformer le code du ShowViews en .. et ca fonctionne toujours pas ..</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-csharp"><span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Button_ShowViews_Click</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, RoutedEventArgs e</span>)</span>
{
lb_Selection.Items.Clear(); <span class="hljs-comment">// Still an exception</span>
}
</code></pre></div>
<p>J’ai pu regler en faisant .. :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-csharp"><span class="hljs-keyword">var</span> new_list = <span class="hljs-keyword">new</span> List<<span class="hljs-keyword">object</span>>();
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;
</code></pre></div>
<p>MAis je ne comprend toujours pas pourquoi dans certains cas je peut utiliser Clear/Add et d’autre gois changer la source ..</p>
<p>Merci d’avance pour votre aide ! -Z-</p>