2016-04-29 1 views
0

Ich versuche, alle Kontrollkästchen durch eine Bindung zu überprüfen. Die getChecked-Eigenschaft wird nach dem Klicken auf die Schaltfläche geändert, aber die Kontrollkästchen werden gerade nicht überprüft. Sieht jemand, was ich hier falsch mache? Dies ist der XAML-Code für das Listenfeld.Checkboxen in Listbox werden nicht über Binding geprüft

<ListBox Name="scroll" ItemContainerStyle ="{StaticResource _ListBoxItemStyle}" Tag="{Binding SortingIndex}" BorderBrush="#C62828" BorderThickness="1" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Name="checkboxStack"> 
         <CheckBox IsChecked="{Binding Path=getChecked}" Content="{Binding Path=vraag}" Style="{StaticResource LifesaversCheckBoxesA}"/> 
         <StackPanel Margin="20,0,0,0"> 
          <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=Tag}" Content="{Binding Path=antwoorden[0]}" FontSize="15" /> 
          <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=Tag}" Content="{Binding Path=antwoorden[1]}" FontSize="15" /> 
          <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=Tag}" Content="{Binding Path=antwoorden[2]}" FontSize="15" /> 
         </StackPanel> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Dies ist der Event-Handler für die Schaltfläche ich die getChecked boolean für jeden vraag in Vragenlijst auf true ändern gemacht. Die Beispieldaten dienen lediglich dazu, einige zufällige Zeichenfolgen zu erzeugen.

public partial class LivesaversWindow : UserControl 
{ 
    ObservableCollection<Vraag> vragenLijst; 
    public LivesaversWindow() 
    { 
     InitializeComponent(); 
     vragenLijst = new VragenList(SampleData.vragen()); 

     scroll.ItemsSource = vragenLijst; 

    } 

    private void alles_Selecteren(object sender, RoutedEventArgs e) 
    { 
     if ((string)select.Content == "Alles selecteren") 
     { 
      foreach(Vraag vraag in vragenLijst) 
      { 
       vraag.getChecked = true; 

      } 
      select.Content = "Alles deselecteren"; 
     } 
     else 
     { 
      foreach (Vraag vraag in vragenLijst) 
      { 
        vraag.getChecked = false; 
      } 
      select.Content = "Alles selecteren"; 
     } 
    } 

Und das sind die 2 Klassen, die ich benutze.

public class Vraag 
{ 
    public List<string> antwoorden { get; set; } 
    public string vraag { get; set; } 
    public Boolean getChecked { get; set; } 
} 





public class VragenList : ObservableCollection<Vraag> 
{ 
    public VragenList(List<Vraag> vragen) :base() 
    { 
     foreach (var vraag in vragen) 
     { 
      Add(vraag); 
     } 
    } 
} 

Antwort

1

Ihre Klasse Vraag ist nicht die INotifyPropertyChanged-Schnittstelle implementieren. Deshalb ist die UI wird keine Änderungen der Registrierung, die auf Ihre Objekte gemacht werden Anzeigen in der Ansicht:

So bascially, was Sie tun müssen, ist die INotifyPropertyChanged-Schnittstelle eine Art, wie diese Umsetzung:

public class Vraag : INotifyPropertyChanged 
{ 
    public List<string> antwoorden { get; set; } 
    public string vraag { get; set; } 

    private bool isChecked; 

    public bool getChecked 
    { 
     get { return isChecked; } 
     set 
     { 
      isChecked = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged([CallerMemberName] string propName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); 
    } 
} 

Hoffnung dieser hilft!

+0

Das hat funktioniert, vielen Dank. –

+0

Kein Problem. Genau wie ein Seitenknoten: Es ist immer schön, eine Basisklasse zu erstellen, die die INotifyPropertyChanged-Schnittstelle mit dem PropertyChangedEventHandler und der OnPropertyChanged-Methode implementiert, so dass Sie sie einfach in allen Klassen verwenden können, die Sie in Ihrer UI anzeigen möchten. –

1

Ihre Klasse Vraag implementieren muss INotifyPropertyChanged Schnittstelle