WPF自定义控件数据绑定——双向绑定

自己整了一个自定义控件UserControl,功能就是一个带拼音筛选功能的ComboBox,不过发现数据绑定dataset的row的一列之后可以显示值,但是更改之后不能更改到row里,在textbox是正常的,如下 :

<TextBox Name="input_XM_txb" Text="{Binding Path=XM}" Style="{StaticResource tb_TextBox}" MaxLength="40" />
<my:ComboBoxControl  x:Name="ctl1" SelectedValue="{Binding Path=LX}" />


 

最后更改为这样“Binding Path=LX,Mode=TwoWay”,就可以双向绑定了,原因可能是因为默认是单向:

<my:ComboBoxControl  x:Name="ctl1" SelectedValue="{Binding Path=LX,Mode=TwoWay}" />


 

数据绑定到DataRow是很方便的,绑定之后数据更改了立即反应到DataRow里面,加上DataRow的属性RowState和一些自带事件,减少了开发的麻烦。但是暂时只限于String格式,其他格式比如datetime,int之类的,如果为空,程序会报错的,这个是dataset的一个缺陷。如果所有类型都可以绑定,代码量就少很多了。

 

 

 

 

WPF(Windows Presentation Foundation)中自定义控件并绑定属性值是构建灵活用户界面的常见需求。自定义控件允许开发者封装特定的功能和外观,以便在应用程序中重复使用。绑定属性值则使得这些控件能够响应外部数据源的变化,实现数据驱动的UI更新。以下是自定义控件并绑定属性值的基本步骤: 1. 创建自定义控件类:首先,需要创建一个继承自FrameworkElement或者更高级别控件类的自定义控件类。 2. 定义依赖属性:在自定义控件类中定义依赖属性(DependencyProperty)。依赖属性是WPF中用于实现数据绑定、样式化和主题化的机制。它们允许控件的属性值由外部数据源动态决定。 3. 实现依赖属性的注册:在静态构造函数中注册你刚才定义的依赖属性。这一步是必须的,因为依赖属性需要在使用前进行注册。 4. 绑定属性值:在自定义控件的XAML标记或者代码中,使用数据绑定表达式将依赖属性与外部数据源绑定。 例如,假设我们创建了一个名为MyCustomControl的自定义控件,并想绑定一个名为"CustomProperty"的依赖属性: ```csharp public class MyCustomControl : Control { // 定义依赖属性 public static readonly DependencyProperty CustomPropertyProperty = DependencyProperty.Register( "CustomProperty", typeof(string), typeof(MyCustomControl), new PropertyMetadata(default(string))); // 依赖属性的CLR包装器 public string CustomProperty { get { return (string)GetValue(CustomPropertyProperty); } set { SetValue(CustomPropertyProperty, value); } } static MyCustomControl() { // 注册依赖属性 DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl))); } } ``` 在XAML中,你可以这样绑定这个属性: ```xml <MyCustomControl> <MyCustomControl.CustomProperty> <Binding Path="SomeProperty" Source="{StaticResource dataContextSource}"/> </MyCustomControl.CustomProperty> </MyCustomControl> ``` 在这里,"SomeProperty" 是绑定的数据源中的属性名,"dataContextSource" 是数据上下文的资源名称,它是一个包含数据模型实例的对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值