复制代码 代码如下:C#: namespace WpfDemo { public partial class Changed : Page { #region properties public UserModel CurrentUser { get;set; } #endregion #region Constructor public Changed() { InitializeComponent(); this.Loaded += new RoutedEventHandler(Changed_Loaded); this.btnChanged.Click += new RoutedEventHandler(btnChanged_Click); } #endregion #region Changed_Loaded void Changed_Loaded(object sender, RoutedEventArgs e) { this.CurrentUser = new UserModel() {UserName="swd"}; this.DataContext = this.CurrentUser; } #endregion #region btnLogon_Click void btnChanged_Click(object sender, RoutedEventArgs e) { this.txtExplicit.GetBindingExpression(TextBox.TextProperty).UpdateSource(); } #endregion } public class UserModel { public string UserName { get;set;} } } 程序执行结果如上所述。 四、 数据提供程序 1. XmlDataProvider: XmlDataProvider访问 XML 数据的方式有以下三种: 可以使用 XmlDataProvider 类嵌入内联 XML 数据。 可以将 Source 属性设置为 XML 数据文件的 Uri。 可以将 Document 属性设置为 XmlDocument。 注释:当 XmlDocument.NodeChanged 事件发生时,XmlDataProvider 执行所有绑定的完全刷新。 特定节点不进行优化。 默认情况下,XmlDataProvider.IsAsynchronous 属性设置为 true,表示默认情况下 XmlDataProvider 检索数据并异步生成 XML 节点的集合。 以下将介绍使用上面所述的三种方式显示xml数据: 示例 复制代码 代码如下:Xaml: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="xmlBinding" xmlns:local="clr-namespace:WpfDemo"> swd awd asd
复制代码 代码如下:XML:
swd 110
asd 120
awd 130
通过以上示例我想大家应该很容易理解与应用。2. ObjectDataProvider: ObjectDataProvider 使您能够在 XAML 中创建可用作绑定源的对象,并为您提供以下属性,以对对象执行查询并绑定到结果。 使用 ConstructorParameters 属性将参数传递给对象的构造函数。 使用 MethodName 属性调用一个方法。 使用 MethodParameters 属性将参数传递给该方法。 然后,可以绑定到该方法的结果。 使用ObjectType 指定将提供数据绑定源的对象。 使用 ObjectInstance 属性来指定现有的对象实例作为源 注释:还可以使用 IsAsynchronous 属性指定是在辅助线程还是在活动上下文中执行对象创建。也就是是否异步检索数据。 示例: 复制代码 代码如下:XAML: C#: namespace WpfDemo { #region CObjectDataProvider public partial class CObjectDataProvider : Page { public CObjectDataProvider() {InitializeComponent();} } #endregion #region Country public class Country { #region Name public string Name {get;set;} #endregion #region ProvinceList public List ProvinceList {get;set;} #endregion #region GetAllCity public static List GetAllCity() { return new List{ new Country { Name = "中国", ProvinceList = new List { new Province{ Name="福建省", CityList=new List{new City{Name="福州市"},new City{Name="厦门市"},new City{Name="漳州市"},new City{Name="泉州市"}} }, new Province{Name="江苏省", CityList=new List{ new City{Name="苏州市"},new City{Name="南京市"},new City{Name="扬州市"},new City{Name="无锡市"}} }, new Province{Name="江西省", CityList=new List{new City{Name="南昌市"},new City{Name="九江市"}}}} } }; } #endregion } #endregion #region Province public class Province { #region Name public string Name {get;set;} #endregion #region CityList public List CityList {get;set;} #endregion } #endregion #region City public class City { #region Name public string Name {get;set;} #endregion } #endregion } 五、类型转换与数据校验 1. IValueConverter接口 提供一种将自定义逻辑应用于绑定的方式。 在Binding时,数据源对象到目标对象之间(或者目标对象到数据源对象)可能需要某种转换。这时只需实现IValueConverter接口自定义值转换器即可。 接口原型定义: public interface IValueConverter{ object Convert(object value, Type targetType, object parameter, CultureInfo culture); object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);} 参数value是要转换的值,typeTarget是转换后的值类型,parameter是Binding 类的 ConverterParameter传递过来的参数。 Convert方法:数据绑定引擎在将值从绑定源传播给绑定目标时,调用此方法。 ConvertBack方法:数据绑定引擎在将值从绑定目标传播给绑定源时,调用此方法。 ValueConversion属性作用是告诉自定义转换器类可以转换的源数据和目标数据的 类型(ValueConversion属性将在稍后的示例中看到)。 2. ValidationRule类 提供一种为检查用户输入的有效性而创建自定义规则的方法。 ValidationRule : 所有自定义验证规则的基类。提供了让用户定义验证规则的入口。 ExceptionValidation :表示一个规则,该规则检查在绑定源属性更新过程中引发的异常。它是一个内置的规则,它检查在绑定源属性更新过程中引发的异常。 ValidationResult : 数据验证结果的表现方式。ValidationRule对象的Validate方法执行完毕后通过ValidationResult来表示验证的结果。这里包含了错误信息―ErrorContent,数据是否有效―IsValid。ValidResult 为 ValidationResult 的有效实例。 ValidationError :表示一个验证错误,该错误在 ValidationRule 报告验证错误时由绑定引擎创建。 复制代码 代码如下:XAML: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="TypeConvertAndValidationRule" xmlns:src="clr-namespace:WpfDemo">
复制代码 代码如下:C#: namespace WpfDemo { #region TypeConvertAndValidationRule public partial class TypeConvertAndValidationRule : Page { public TypeConvertAndValidationRule() { InitializeComponent(); this.DataContext = new UserInfo { Name = "swd", Birthday =System.Convert.ToDateTime("1987/10/21"), EMail = "swd@126.com" }; } } #endregion #region UserInfo public class UserInfo { #region Name public string Name {get;set;} #endregion #region Birthday public DateTime Birthday {get;set;} #endregion #region EMail private string email; public string EMail { get {return email;} set { this.email = value; Regex r = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); if (!r.IsMatch(value)) { throw new ApplicationException("电子邮件格式有误!"); } } } #endregion } #endregion 六、 绑定集合对象 1. ICollectionView接口 允许集合具有当前记录管理、自定义排序、筛选和分组这些功能。比如排序,分组,筛选,导航以及其它自定义视图,并且这不会影响到你的后台数据的实际存储。 2. ObservableCollection 类 表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。 3. WPF MVVM概要 MVVM(Model-View-ViewModel)是由MVC,MVP演变而来。MVVM分离了逻辑与界面,解放业务逻辑。