WPFcheckbox绑定

虽然使用checkbox的Click事件将checkbox的选中状态存储在variables中是微不足道的,但是如何通过数据绑定来完成? 我发现的所有示例都有从某个数据源更新的UI,或者将一个控件绑定到另一个控件; 我想单击checkbox时更新成员variables。

TIA任何指针

你需要一个依赖项属性:

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

一旦完成,您将checkbox绑定到依赖项属性:

 <CheckBox x:Name="myCheckBox" IsChecked="{Binding ElementName=window1, Path=CheckBoxIsChecked}" /> 

为了达到这个目的,你必须在你的窗口或者用户控件的打开标签中命名,并且在ElementName参数中使用这个名字。

有了这段代码,无论何时在代码中更改属性,都将更改文本框。 此外,无论您选中/取消选中该文本框,依赖项属性也会更改。

编辑:

创build依赖属性的简单方法是input代码片段propdp,它将为您提供依赖属性的一般代码。

所有的代码:

XAML:

 <Window x:Class="StackOverflowTests.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" x:Name="window1" Height="300" Width="300"> <Grid> <StackPanel Orientation="Vertical"> <CheckBox Margin="10" x:Name="myCheckBox" IsChecked="{Binding ElementName=window1, Path=IsCheckBoxChecked}" >Bound CheckBox</CheckBox> <Label Content="{Binding ElementName=window1, Path=IsCheckBoxChecked}" ContentStringFormat="Is checkbox checked? {0}"></Label> </StackPanel> </Grid> </Window> 

C#:

 using System.Windows; namespace StackOverflowTests { /// <summary> /// Interaction logic for Window1.xaml /// </summary> 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(); } } } 

注意背后的唯一代码是依赖属性。 标签和checkbox都绑定到它。 如果checkbox更改,则标签也会更改。

您必须使您的绑定双向:

 <checkbox IsChecked="{Binding Path=MyProperty, Mode=TwoWay}"/> 

您好,这是我第一次发布,请耐心等待:我的答案是创build一个简单的属性:

  public bool Checked { get; set; } 

然后设置checkbox(称为cb1)的数据上下文:

 cb1.DataContext = this; 

然后在xaml中绑定它的IsChecked属性

 IsChecked="{Binding Checked}" 

代码是这样的:

 // the xaml <CheckBox x:Name="cb1" HorizontalAlignment="Left" Margin="439,81,0,0" VerticalAlignment="Top" Height="35" Width="96" IsChecked="{Binding Checked}"/> 
 // the c# 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.ToString()); } } 

如果你的数据类有属性“MyProperty”,那么你像这样绑定IsChecked ….(转换器是可选的,但有时你需要)

 <Window.Resources> <local:MyBoolConverter x:Key="MyBoolConverterKey"/> </Window.Resources> <checkbox IsChecked="{Binding Path=MyProperty, Converter={StaticResource MyBoolConverterKey}}"/> 

这里是一个post,显示了一个简单的数据绑定到两个checkbox,这是互斥的IsChecked属性的一个例子。

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

希望有所帮助。

应该比这更容易。 只要使用:

 <Checkbox IsChecked="{Binding Path=myVar, UpdateSourceTrigger=PropertyChanged}" /> 

这适用于我(只包括必要的代码,为您的需要填充更多):

在XAML中定义了一个用户控件:

 <UserControl x:Class="Mockup.TestTab" ......> <!-- a checkbox somewhere within the control --> <!-- IsChecked is bound to Property C1 of the DataContext --> <CheckBox Content="CheckBox 1" IsChecked="{Binding C1, Mode=TwoWay}" /> </UserControl> 

在代码后面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(....); } } 

解决scheme类中的某处定义了MyViewModel

 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")); } } } }