1. 数据结构类
csharp
public class User : INotifyPropertyChanged这确实是一个数据结构类(数据模型/ViewModel),负责存储数据
2. 属性变更触发机制
csharp
set
{
_name = value;
OnPropertyChanged(nameof(Name)); // 属性改变时触发通知
}3. 预定义的事件委托
csharp
public event PropertyChangedEventHandler PropertyChanged;这是.NET框架内置的事件类型,专门用于属性变更通知
4. 事件触发和参数传递
csharp
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));this:哪个对象发生了改变PropertyChangedEventArgs(propertyName):哪个属性发生了改变
5. WPF的绑定查找机制
WPF运行时维护着一个"绑定注册表",当事件触发时:
查找所有绑定了这个属性和对象的UI元素
自动更新这些UI元素的显示
完整的数据流:
csharp
// 1. 数据改变
user.Name = "张三";
// 2. 触发通知
OnPropertyChanged("Name");
// 3. 触发事件
PropertyChanged?(user, new PropertyChangedEventArgs("Name"));
// 4. WPF查找绑定
// ↓ WPF内部查找所有 Binding.Path="Name" 且 DataContext=user 的控件
// ↓ 找到:<TextBlock Text="{Binding Name}"/>
// ↓ 找到:<TextBox Text="{Binding Name}"/>
// 5. 更新UI
// TextBlock显示"张三"
// TextBox显示"张三"实际应用场景:
xml
<!-- XAML中的绑定 -->
<StackPanel DataContext="{Binding CurrentUser}">
<TextBlock Text="{Binding Name}"/> <!-- 显示UserName -->
<TextBox Text="{Binding Name}"/> <!-- 编辑UserName -->
<TextBlock Text="{Binding Email}"/> <!-- 显示Email -->
</StackPanel>当执行 user.Name = "新值" 时:
TextBlock和TextBox都会自动更新显示"新值"
不需要手动操作任何UI控件!
您的理解完全正确,这正是WPF数据绑定的核心机制!