Liaison de la case à cocher WPF

Bien qu’il soit sortingvial de stocker l’état vérifié d’une case à cocher dans une variable à l’aide de l’événement Click de la case à cocher, comment le ferais-je via la liaison de données? Tous les exemples que j’ai trouvés ont l’interface utilisateur mise à jour à partir d’une source de données ou lient un contrôle à un autre; Je souhaite mettre à jour une variable membre lorsque la case à cocher est cliquée.

TIA pour tout pointeur …

Vous avez besoin d’une propriété de dépendance pour cela:

public BindingList Users { get { return (BindingList)GetValue(UsersProperty); } set { SetValue(UsersProperty, value); } } public static readonly DependencyProperty UsersProperty = DependencyProperty.Register("Users", typeof(BindingList), typeof(OptionsDialog)); 

Une fois cela fait, vous liez la case à cocher à la propriété de dépendance:

  

Pour que cela fonctionne, vous devez nommer votre Window ou UserControl dans sa balise d’ouverture et utiliser ce nom dans le paramètre ElementName.

Avec ce code, chaque fois que vous modifiez la propriété du côté du code, vous allez modifier la zone de texte. De plus, chaque fois que vous cochez / décochez la case, la propriété de dépendance change également.

MODIFIER:

Un moyen simple de créer une propriété de dépendance est de taper le fichier propdp, qui vous donnera le code général des propriétés de dépendance.

Tout le code:

XAML:

     Bound CheckBox      

C #:

 using System.Windows; namespace StackOverflowTests { ///  /// Interaction logic for Window1.xaml ///  public partial class Window1 : Window { public bool IsCheckBoxChecked { get { return (bool)GetValue(IsCheckBoxCheckedProperty); } set { SetValue(IsCheckBoxCheckedProperty, value); } } // Using a DependencyProperty as the backing store for //IsCheckBoxChecked. This enables animation, styling, binding, etc... public static readonly DependencyProperty IsCheckBoxCheckedProperty = DependencyProperty.Register("IsCheckBoxChecked", typeof(bool), typeof(Window1), new UIPropertyMetadata(false)); public Window1() { InitializeComponent(); } } } 

Notez que le seul code derrière est la propriété de dépendance. L’étiquette et la case à cocher y sont liées. Si la case à cocher change, l’étiquette change également.

Vous devez rendre votre liaison bidirectionnelle:

  

Bonjour, c’est la première fois que je poste, alors soyez patient: ma réponse a été de créer une propriété simple:

 public bool Checked { get; set; } 

Ensuite, définissez le contexte de données de la case à cocher (appelée cb1):

 cb1.DataContext = this; 

Puis lier la propriété IsChecked de celle-ci dans le xaml

 IsChecked="{Binding Checked}" 

Le code est comme ceci:

XAML

  

Code derrière

 public partial class MainWindow : Window { public bool Checked { get; set; } public MainWindow() { InitializeComponent(); cb1.DataContext = this; } private void myyButton_Click(object sender, RoutedEventArgs e) { MessageBox.Show(Checked.ToSsortingng()); } } 

Si vous avez la propriété “MyProperty” sur votre classe de données, alors vous liez le IsChecked comme ceci …. (le convertisseur est facultatif, mais parfois vous en avez besoin)

     

Voici un article qui montre un exemple de liaison de données simple à une propriété IsChecked de deux cases à cocher, qui s’excluent mutuellement.

http://www.helplessautomation.com/2011/01/wpf-coding-mutually-exclusive-check-boxes-with-data-binding/

J’espère que cela pourra aider.

Devrait être plus facile que ça. Utilisez simplement:

  

Cela fonctionne pour moi (code essentiel seulement inclus, remplissez plus pour vos besoins):

Dans XAML, un contrôle utilisateur est défini:

      

En code pour UserControl

 public partial class TestTab : UserControl { public TestTab() { InitializeComponent(); // the standard bit // then we set the DataContex of TestTab Control to a MyViewModel object // this MyViewModel object becomes the DataContext for all controls // within TestTab ... including our CheckBox DataContext = new MyViewModel(....); } } 

Quelque part dans la classe de solution, MyViewModel est défini

 public class MyViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private bool m_c1 = true; public bool C1 { get { return m_c1; } set { if (m_c1 != value) { m_c1 = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("C1")); } } } }