Флажок не удаляет элементы, если не установлен - C # WPF - PullRequest
0 голосов
/ 16 декабря 2009

CheckBox в моей форме вообще не удалит элементы из списка, если он не отмечен, даже если он у меня в правильных событиях

private void WWW_checkbox_Checked(object sender, RoutedEventArgs e)
{
    packagelist_listbox.Items.Remove(SelectaCategory_listbox);
    LoadPackageList.Load("www.xml");
    XmlNodeList WWWPackageList = LoadPackageList.SelectNodes("/Packages/*");
    int countthenodes = 0;



    //Removes the text "Select A Category" and refrehes the form

    foreach (XmlNode WWWPackages in WWWPackageList)
    {


        //Adds each attribute to the apropriate variable
        WWWPackageTitle.Add(WWWPackages.Attributes["title"].Value.ToString());
        WWWPackageInfoPage.Add(WWWPackages.Attributes["infopage"].Value.ToString());
        WWWPackageDLURL.Add(WWWPackages.Attributes["dlurl"].Value.ToString());
        WWWPackageID.Add(WWWPackages.Attributes["id"].Value.ToString());
        if (WWW_checkbox.IsChecked == true)
        {
            packagelist_listbox.Items.Add(WWWPackageTitle[countthenodes]);
        }


        countthenodes++;
    }
    packagelist_listbox.Items.Refresh();
    Refresh(packagelist_listbox);
}





private void WWW_checkbox_Click(object sender, RoutedEventArgs e)
{

    if (WWW_checkbox.IsChecked == false)
    {
        foreach (string EachPackageWWW in WWWPackageTitle)
        {
            packagelist_listbox.Items.Remove(packagelist_listbox.Items.Contains(EachPackageWWW));
        }
    }
    packagelist_listbox.Items.Refresh();
    Refresh(packagelist_listbox);




}

Обновление работает правильно, потому что оно будет добавлять один и тот же контент в список каждый раз, когда вы его проверяете

1 Ответ

3 голосов
/ 16 декабря 2009

Проблема в этой строке:

packagelist_listbox.Items.Remove(packagelist_listbox.Items.Contains(EachPackageWWW));

Если вы разбиваете это на части, он делает это:

bool doesListContainsPackage = packagelist_listbox.Items.Contains(EachPackageWWW);
packagelist_listbox.Items.Remove(doesListContainPackage);

т.е. вы удаляете логический результат метода Contains (item), а не сам элемент.

Измените это на:

packagelist_listbox.Items.Remove(EachPackageWWW);

или

if (packagelist_listbox.Items.Contains(EachPackageWWW))
  packagelist_listbox.Items.Remove(EachPackageWWW));

если хочешь быть очень осторожным.

Кстати, вы можете рассмотреть возможность использования события Unchecked (для симметрии с Checked) вместо события Click.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...