Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pętla sprawdzająca wszystkie pozycje.


Rekomendowane odpowiedzi

Opublikowano

Wie ktoś jak w wpf zrobić pętle która bedzie sprawdzała czy item.isChecked = true? Chodzi o to żeby pętla sprawdziła wszystkie itemy i jeśli item.isChecked = true to zmieniało na false. IsChecked to jest bind od checkboxes.

Opublikowano

foreach (Control x in this.Controls){
    if (x is CheckBox /*lub adekwatna kontrolka w WPF*/){
        x.Checked = false;
    }
}

Pozdrawiam, 

Paweł 'asrv'

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir nicht ganz sicher."
~A. Einstein

Opublikowano
foreach (Control x in this.Controls){
    if (x is CheckBox /*lub adekwatna kontrolka w WPF*/){
        x.Checked = false;
    }
}
Pozdrawiam, 

Paweł 'asrv'

 

okej to teraz powiedz mi dlaczego to : 

 

 

private void SelectAll_Click(object sender, RoutedEventArgs e)
        {
            foreach (var item in this.List.Items)
            {

                MyItem selectedItem = (MyItem)item;

                if (selectedItem.IsChecked == false)
                {
                    MessageBox.Show("Fal");
                }
                if (selectedItem.IsChecked == true)
                {
                    MessageBox.Show("true");
                }
            }
        }

 

 

działa a już to :

 

 

private void SelectAll_Click(object sender, RoutedEventArgs e)
        {
            foreach (var item in this.List.Items)
            {

                MyItem selectedItem = (MyItem)item;

                if (selectedItem.IsChecked == false)
                {
                    selectedItem.IsChecked = true;
                }
               
            }
        }

 

 

nie działa. Dodatkowy kod

MyItem:

 

 

public class MyItem
        {

            public bool IsChecked
            {
                get;
                set;
            }
           
        } 

 

 

 

I kod xaml checkboxa w listview:

<StackPanel Orientation="Horizontal">
                                    <CheckBox Name="CheckBox" Padding="10" IsChecked="{Binding Path=IsChecked}" />                           
                                </StackPanel>

Chodzi o to ze jest są messsageboxy to wyrzuca prawidłowo czyli jak checkboxy w itemach są zaznaczone to wywala true a jeśli nie są no to fal. Ale gdy już chce zmienić np. z false na true to mi się checkbox nie zaznacza. 

Opublikowano

Zrób:

IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"

Bo jak na razie kontrolka używa tylko get, a do set tak jakby nie ma dostępu

No niestety nadal nie działa. Nic się nie dzieje. 

 

Wie ktoś może co jest nie tak?

 

#edit

Działa

Opublikowano

Jak teraz usunąć zaznaczone itemy?

 

foreach (var item in this.List.Items)
            {

                MyItem selectedItem = (MyItem)item;

                if (selectedItem.IsChecked == true)
                {
                    listview.items.Remove(selectedItem);
                }
               
            }

Kompiluje się ale jak próbuję usunąć to wywala mi błąd że nie może policzyć wszystkich elementów. 

Opublikowano

spróbuj z while: instrukcja która sprawdza czy na liście istnieje obiekt z wartością true, jeśli znajdzie to usuwa i zaczyna się od nowa, jeśli nie to wychodzi z pętli ;)

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir nicht ganz sicher."
~A. Einstein

Opublikowano

Z for też można bardzo łatwo coś takiego zrobić:

            for (int i = 0; i < List.Items.Count; i++)
            {
                CheckBox a = (CheckBox)List.Items.GetItemAt(i);
                if (a.IsChecked == true)
                {
                    List.Items.Remove(a);
                    i -= 1;
                }
            }

Foreach nie da rady, ponieważ (ze strony Microsoftu):

 

 The foreach statement is used to iterate through the collection to get the information that you want, but can not be used to add or remove items from the source collection to avoid unpredictable side effects. If you need to add or remove items from the source collection, use a for loop.

Opublikowano

Z for też można bardzo łatwo coś takiego zrobić:

            for (int i = 0; i < List.Items.Count; i++)
            {
                CheckBox a = (CheckBox)List.Items.GetItemAt(i);
                if (a.IsChecked == true)
                {
                    List.Items.Remove(a);
                    i -= 1;
                }
            }

Foreach nie da rady, ponieważ (ze strony Microsoftu):

Okej. Ale to jest na winforms no nie? A na wpf? ;P 

Opublikowano

Nie, to jest na WPF ;)

Oczywiście zamiast CheckBox możesz wziąć MyItem i będzie praktycznie to samo z czym miałeś problem, ale skoro było IsChecked to przyjąłem, że tam są same CheckBoxy :D

Opublikowano

Nie, to jest na WPF ;)

Oczywiście zamiast CheckBox możesz wziąć MyItem i będzie praktycznie to samo z czym miałeś problem, ale skoro było IsChecked to przyjąłem, że tam są same CheckBoxy :D

Ooo wielkie dzięki. przedtem jak sprawdzałem to nie działało. Nie wiem co robiłem źle. ;P Teraz śmiga. ;) 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...