2010-06-30 10 views
0

J'ai une collection de booléens associés aux jours de la semaine - Collection() {vrai, faux, faux, faux, faux, faux, faux}; Donc tout ce que le bool représente signifie que cette collection s'applique pour dimanche (dimanche étant le premier jour de la semaine ici).Liaison d'une collection <bool> togglebuttons/checkboxed

Maintenant, j'ai défini la source d'items de ma listbox, disons, pour être cette collection. Cependant, ma Collection n'est jamais mise à jour (ma collection est une propriété de dépendance sur la fenêtre). Plus la classe "MyBool" est simplement un wrapper autour d'un objet bool, avec NotifyPropertyChanged implémenté.

Toutes les idées ..... mon code réel est majorly complexe donc la situation ci-dessus est une version brutalement simplifiée, donc faire des hypothèses etc si nécessaire Ill travailler autour de ce donné que j'ai fourni mon code réel.

Merci beaucoup à l'avance,

U.

Répondre

1

Essayez de mettre UpdateSourceTrigger = PropertyChanged dans votre fixation

<ToggleButton IsChecked={Binding Path=BoolValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}/> 

modifier: a créé un petit exemple, semble bien.

La classe wrapper

public class MyBool : INotifyPropertyChanged 
{ 
    private bool _value; 

    public bool Value 
    { 
     get { return _value; } 
     set 
     { 
      _value = value; 
      NotifyPropertyChanged("Value"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Le XAML

 <ListBox ItemsSource="{Binding Path=Users}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <ToggleButton IsChecked="{Binding Path=Value, Mode=TwoWay}" Content="MyButton"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

code derrière

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public ObservableCollection<MyBool> Users { get; set; } 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Users = new ObservableCollection<MyBool>(); 
     DataContext = this; 
     Loaded += new RoutedEventHandler(MainWindow_Loaded); 

    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     FillUsers(); 
    } 

    private void FillUsers() 
    { 

     for (int i = 0; i < 20; i++) 
     { 
      if(i%2 == 0) 
       Users.Add(new MyBool { Value = true }); 
      else 
       Users.Add(new MyBool { Value = false}); 
     } 
    } 
} 
+0

Cela semble aussi ne rien faire im peur .... va prendre un autre regard dans le matin, donc, si rien ne se trouve, je vais répondre – urema

+0

Je ne peux pas sembler le faire sans une sorte de code derrière pour aider à la hausse datant .... Quelqu'un at-il une idée avec liaison directe ??? Merci U – urema

+0

est le xaml posté votre code exact? – hkon