边看书边做边发挥-图书软件-1

本文介绍了一个基于WPF的应用程序开发案例,其中包括了使用.NET框架进行类库设计的方法,特别是如何实现属性变更通知功能。通过创建Catalogue类并利用ObservableCollection与INotifyPropertyChanged接口,实现了章节集合的变更通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要看的图书:.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() 方法,用一个参数反射来反射要变更的属性,这样就不必硬编码属性名,内部再用一个默认的比较器比较要变更的属性,如果值相同,就不必发送通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值