在模型类上使用INotifyPropertyChanged
INotifyPropertyChanged (INPC)是一个接口,用于在属性更改时通知订阅者。在这个讨论中,某些情况下微软自己在他们自己的模型中添加了INPC,例如当您订阅Web服务时自动生成的类。还在其他地方见过它,包括在他们的EF(Entity Framework)中模糊地记得它的存在。某些情况下他们在DAL(数据访问层)实体中使用Castle Proxy自动添加INPC,这样就不必在视图模型中重复所有内容,虽然您也可以使用像Fody等工具在后处理步骤中将其添加到IL中。
根据上述内容,我们可以得出以下结论:
问题出现的原因:
- 需要在属性更改时通知订阅者,以便更新UI或其他相关操作。
- 微软自己在一些模型中添加了INPC,这表明INPC的使用是被广泛接受和认可的。
解决方法:
- 可以手动在模型类中实现INotifyPropertyChanged接口,并在属性更改时调用PropertyChanged事件。
- 可以使用Castle Proxy等工具自动添加INPC接口和相关代码。
- 可以使用Fody等工具在IL级别进行后处理,自动添加INPC代码。
INotifyPropertyChanged是一个在属性更改时通知订阅者的接口,微软自己在一些模型中使用了它。我们可以手动实现该接口,也可以使用工具自动添加。无论使用何种方法,INPC都是一个非常有用的功能,可以帮助我们更好地组织和管理模型类。
INotifyPropertyChanged是用于在WPF中定义绑定时从目标到源引发通知的接口。DependencyProperty和INotifyPropertyChanged与绑定的概念相关联,用于自动更新。如果您需要将视图模型上的属性绑定到视图,您必须实现通知机制,以便在视图模型中发生更改时通知UI。同样的规则也适用于模型到视图的绑定。
假设您想在.CS文件中编写像Viewmodel.Name =" my new name"
这样的代码,并期望TextBox显示更改后的名称。
<TextBox Text="{Binding ViewModel.Name} "/>
在这里,视图模型需要实现INotifyPropertyChanged。
<TextBox Text="{Binding Model.Name} "/>
在这里,模型需要实现INotifyPropertyChanged。
当向VM中添加代码时,这个工作原理。代码后台逻辑:
VM vm=new VM(); vm.FName = "aa"; this.DataContext =vm;
XAML逻辑:
<TextBox Text="{Binding FName}"/>
VM逻辑:
public string FName
尝试在问题中添加代码并尝试解释您的确切问题,这可能有助于我们帮助您。
(INotifyPropertyChanged on Model classes)这个问题的出现的原因是有人想要在Model类中实现INotifyPropertyChanged接口,但是不确定是否应该这样做。为了解决这个问题,可以参考stackoverflow上的相关讨论和问题。
根据stackoverflow上的讨论,没有任何架构的硬性规定,你可以根据自己的需求进行修改。所以,如果你确实需要在Model类中实现INotifyPropertyChanged接口,可以参考这个问题:https://stackoverflow.com/questions/6922130。
在这个讨论中,有足够的观点来涵盖双方的论点,你可以看看哪个观点更符合你的项目需求。这个讨论的链接是:https://stackoverflow.com/a/2804565/4303098。
这些讨论可能会帮助你实现INotifyPropertyChanged接口。