WPF学习笔记-资源绑定

目录

1.属性变更事件

2.ICommand接口

3.ComboBox数据绑定



WPF通过资源绑定可以省略很多属性变更交互的代码。

1.属性变更事件

属性变更时通知窗体进行更新,需要设置属性变更事件。类需要继承INotifyPropertyChanged接口,然后创建PropertyChangedEventHandler属性变更委托,并调用属性变更函数。

    

    public class AutoSampleName : INotifyPropertyChanged
    {

        /// <summary>
        /// 实现接口
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// 属性变更事件
        /// </summary>
        /// <param name="Path">事件源</param>
        public void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

INotifyPropertyChanged接口需要引用:

        using System.ComponentModel;

[CallerMemberName] string propertyName = "" 是对方法名的调用方式,支持调用方法的时候自动获取出发事件的方法属性的名称作为参数。需要添加引用:using System.Runtime.CompilerServices;

属性变更时,在set访问器中调用属性变更事件。

        public bool IsEnabled
        {
            get { return isEnabled; }
            set
            {
                isEnabled = value;
                OnPropertyChanged(); 
            }
        }

2.ICommand接口

ICommand可用于实现Xaml和后台代码的方法绑定。

    /// <summary>
    /// Base command class.
    /// </summary>
    /// <remarks>通过事件委托,以便跨线程调用</remarks>
    public class BaseCommand : ICommand
    {
        /// <summary>
        /// Event handler
        /// 事件出发时先调用CanExecute(),然后调用
        /// </summary>
        public event EventHandler CanExecuteChanged;
        /// <summary>
        /// Execute action.
        /// </summary>
        public Action<object> DoExecute { get; set; }

        /// <summary>
        /// Canexecute method.
        /// </summary>
        public Func<object, bool> DoCanExecute { get; set; } = new Func<object, bool>(obj => true);

        /// <summary>
        /// Can execute.
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public bool CanExecute(object parameter)
        {
            //初始化时会调用一次
            return DoCanExecute?.Invoke(parameter) == true;
        }
        /// <summary>
        /// Excute.
        /// </summary>
        /// <param name="parameter"></param>
        public void Execute(object parameter)
        {
            //实例化委托。
            DoExecute?.Invoke(parameter);
        }

        /// <summary>
        /// 执行委托,调用CanExecute。
        /// </summary>
        public void DoCanExecuteChanged()
        {
            CanExecuteChanged?.Invoke(this, EventArgs.Empty);
        }
    }

3.ComboBox数据绑定

<ComboBox  ItemsSource="{Binding GenoTypeList}" DisplayMemberPath="MainGenotype" SelectedValuePath="ID" SelectedItem="{Binding SelectedGenotype}" Text="{Binding SelectedGenotype.MainGenotype}" />

Xaml绑定数据时,若单独绑定ItemsSource,会发生后台更新SelectedItem后,但是UI界面并没有更新具体的数据。

需要同时绑定Text数据,才能正常更新数据。

数据绑定时,它可以通过“类.属性”的方法绑定某一个类的具体属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼听禅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值