J'ai un problème simple de définition d'une liaison de données bidirectionnelle d'une case à cocher dans Silverlight 3.0. Il doit être une évidence, mais j'ai probablement oublié mon cerveau à la maison aujourd'hui ...Silverlight checkbox la liaison bidirectionnelle ne fonctionne pas comme prévu
J'ai défini une classe modèle pour représenter mes .. 'données'. J'ai implémenté l'interface INotifyPropertyChanged pour permettre à l'interface utilisateur de voir quand les données changent.
public class Model : INotifyPropertyChanged
{
private bool _value;
public bool Value
{
get { return this._value; }
set
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
this._value = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Ensuite, je mis une case à cocher et un bouton sur la .. 'forme':
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>
<Button Click="Button_Click" Content="Test" />
</StackPanel>
Je fourni les données dans le constructeur:
public MainPage()
{
InitializeComponent();
this.DataContext = new Model() { Value = true };
}
Le problème est que vous devez cliquer deux fois sur la case à cocher pour qu'elle cocher/décocher sauf si je désimplémente l'INotifyPropertyChanged. Si vous le désactivez, l'interface utilisateur ne remarque pas si je modifie les données sous-jacentes.
Si je supprime le bit Mode = TwoWay de l'expression de liaison IsChecked, l'interface utilisateur ne remarquera pas non plus les données sous-jacentes, même si le modèle met en œuvre l'interface.
Comment puis-je faire pour:
- avons la case liée aux données au démarrage
- ont le changement case isChecked pour modifier les données sous-jacentes
- avez la case à cocher détecter le changement de données sous-jacentes et se mettre à jour?
Merci !!! Ça a marché. Je t'ai dit que j'avais oublié mon cerveau à la maison aujourd'hui :)) –