2013-10-18 17 views
6

Ho questo problema, che il mio binding di proprietà IsChecked checkbox non funziona. Ho cercato su Google, ma la gente dice che deve legare TwoWay, che è quello che sto usando.Casella di controllo WPF Il binding IsChecked non funziona

Ecco il mio codice:

<CheckBox Name="ckC" VerticalAlignment="Center" 
      IsChecked="{Binding Path=LSMChannelEnable[2], 
           Mode=TwoWay, 
           UpdateSourceTrigger=PropertyChanged}" /> 

Ecco il codice C# dietro di esso:

 public bool[] LSMChannelEnable 
     { 
      get 
      { 
       return this._liveImage.LSMChannelEnable; 
      } 
      set 
      { 
       this._liveImage.LSMChannelEnable = value; 
       OnPropertyChanged("LSMChannelEnable"); 
       OnPropertyChanged("EnableChannelCount"); 
       OnPropertyChanged("LSMChannel"); 
      } 
     } 

Tutti gli indicatori sono molto apprezzati,

+0

Come nota a margine, la casella di controllo WPF è già vincolante a due vie per impostazione predefinita. –

risposta

12

Questo perché si sono vincolanti ad un array . Estrarre la proprietà che si desidera associare a una proprietà separata.

Xaml:

IsChecked="{Binding Path=ButtonEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

Codice:

public bool ButtonEnabled 
{ 
    get { return this._liveImage.LSMChannelEnable[2]; } 
    set { this._liveImage.LSMChannelEnable[2] = value; 
     OnPropertyChanged("ButtonEnabled"); 
    } 
} 
+0

vuoi dire "public bool ButtonEnabled"? – Karthik

+0

Sì! Risolto, grazie! –

+0

Si potrebbe voler attivare "OnPropertyChanged (" ButtonEnabled ")" anche nel setter di "public bool [] LSMChannelEnable". In caso contrario, se si assegna un array diverso a LSMChannelEnable, un valore bool eventualmente modificato non verrà riflesso dallo stato del pulsante. – elgonzo

4

Prova questa:

OnPropertyChanged("Item[]"); 

La proprietà generato dal compilatore quando si utilizza un indicizzatore. Vedi this blog post.

+0

Grazie! Ma mi sento di sopra più facile da capire. –