初学WPF之前后台数据绑定

数据绑定可以是 Xaml 内部的绑定,也可是 Xaml 中某个控件的某个属性与代码中某个变量之间的绑定,这里首先介绍一下后者:

首先,我们需要将要绑定的对象包装一下,像向面这样:

public abstract class BindableObject : INotifyPropertyChanged

{

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)

    {

        var propertyChanged = PropertyChanged;

        if (PropertyChanged != null)

        {

            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

        }

    }

 

    protected void SetProperty<T> (ref T item, T value, string propertyName = null)

    {

        if (!EqualityComparer<T>.Default.Equals(item, value))

        {

            item = value;

            OnPropertyChanged(propertyName);

        }

    }

}

由于每个被绑定的对象都必需实现 INotifyPropertyChanged 接口,然而,并不是简单的实现了 PropertyChanged 就可以,好像还要对 PropertyChanged 做一下处理,所以就有了上面这个抽象类;它完成的对 INotifyPropertyChanged 的基本封装,使用我们在后面的操作时会方便许多;

在完成了上面的类之后,接下来就需要用它来包装我们要绑定的对象了:

public class BtColor : BindableObject

{

    private Brush btColor;

 

    public BtColor()

    {

        this.btColor = Brushes.WhiteSmoke;

    }

 

    public Brush BColor

    {

        get

        {

            return this.btColor;

        }

 

        set

        {

            SetProperty<Brush>(ref this.btColor, value);

        }

    }

}

是的,只要继承这个抽象类,然后实现你要绑定的变量的 getter setter (注意 setter 的不同)这里我们需要将一个 Brush 对象与一个按键的 BackGround 属性绑定在一起,那么我们要对这个按键做什么呢?

接下来我们需要在 Xaml 代码中做如下修改:

Background="{Binding BColor, Mode=TwoWay}"

使用 Binding 关键字,将 Background 与 BColor 变量绑定在一起;可是这个 BColor 又是谁呢?

是的,我们也看到上面的BtColor类中我们实现了 BColor,可是这样就可以了吗?

当然不够,因为我们还没有实现BtColor类,所以我们还要在后台代码中加入如下内容:

private BtColor btColor;

this.btColor = new BtColor();

BtBorder.DataContext = btColor;

这里我们创建了一个类BtColor的对象,并将它赋值给BtBorderDataContext属性,是的,这就是那关键一步,在这之后BtBorder就知道那个BColor是谁了!

在完成了上面的操作之后,按键的背景色就会随着BColor的变化而实时更新了,但是这里还有一点需要注意,那就是,在这之后不能再直接使用BtBorder对象来修改它的Background属性,否则数据绑定会失效; 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值