赞
踩
目录
WPF通过资源绑定可以省略很多属性变更交互的代码。
属性变更时通知窗体进行更新,需要设置属性变更事件。类需要继承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();
- }
- }
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);
- }
- }
<ComboBox ItemsSource="{Binding GenoTypeList}" DisplayMemberPath="MainGenotype" SelectedValuePath="ID" SelectedItem="{Binding SelectedGenotype}" Text="{Binding SelectedGenotype.MainGenotype}" />
Xaml绑定数据时,若单独绑定ItemsSource,会发生后台更新SelectedItem后,但是UI界面并没有更新具体的数据。
需要同时绑定Text数据,才能正常更新数据。
数据绑定时,它可以通过“类.属性”的方法绑定某一个类的具体属性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。