要看的图书:.NET设计规范约定、惯用法与模式(第二版)
新建解决方案名:EuropeanCastle
项目文件夹 Books, 包含 Book 项目和 BookLite, 第1个是 WPF 程序,第2个是控件台程序,再建一个类库 EuropeanCastle.Books
EuropeanCastle.Books 类库和空间同名,
包含类 Catalogue 目录, Chapter 章节, Section 节
子命名空间 FrameworkDesignGuidelines 框架设计规范
设置主窗体的宽高,移除标题属性,将要用来显示书名而不是默认的MainWindow,但这里还没有编写绑定代码,保持为空
<Window x:Class="Book.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="700" Width="800">
<Grid>
</Grid>
</Window>
Catalogue 类引用 System.ComponentModel 空间,可以用做属性变更通知,再引用System.Collections.ObjectModel 空间,添加可通知的泛型集合 ObservableCollection 类,泛型参数为Chapter,添加一些变更通知用的内部方法和一个字段 chapters 章节集合并添加属性 Chapters
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Runtime.CompilerServices;
namespace EuropeanCastle.Books
{
public class Catalogue : INotifyPropertyChanged
{
private ObservableCollection<Chapter> chapters = new ObservableCollection<Chapter>();
public Catalogue()
{
}
public ObservableCollection<Chapter> Chapters
{
get { return chapters; }
set { SetProperty(ref chapters, value); }
}
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
var propertyChanded = PropertyChanged;
if (propertyChanded != null)
{
PropertyChanged(this, e);
}
}
protected void SetProperty<T>(ref T item, T value, [CallerMemberName]string propertyName = null)
{
if (!EqualityComparer<T>.Default.Equals(item, value))
{
item = value;
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
辅助方法 OnPropertyChanged() 用来变更属性,SetProperty() 方法则更方便的调用 OnPropertyChanged() 方法,用一个参数反射来反射要变更的属性,这样就不必硬编码属性名,内部再用一个默认的比较器比较要变更的属性,如果值相同,就不必发送通知。
本文介绍了一个基于WPF的应用程序开发案例,其中包括了使用.NET框架进行类库设计的方法,特别是如何实现属性变更通知功能。通过创建Catalogue类并利用ObservableCollection与INotifyPropertyChanged接口,实现了章节集合的变更通知。
1万+

被折叠的 条评论
为什么被折叠?



