在模型类上使用INotifyPropertyChanged

20 浏览
0 Comments

在模型类上使用INotifyPropertyChanged

在模型类、视图模型类或两者上实现INotifyPropertyChanged是否一般上是可取的?是否可能仅在模型上实现,而不在视图模型上实现?如果不可能在模型上实现,为什么?

0
0 Comments

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都是一个非常有用的功能,可以帮助我们更好地组织和管理模型类。

0
0 Comments

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

尝试在问题中添加代码并尝试解释您的确切问题,这可能有助于我们帮助您。

0
0 Comments

(INotifyPropertyChanged on Model classes)这个问题的出现的原因是有人想要在Model类中实现INotifyPropertyChanged接口,但是不确定是否应该这样做。为了解决这个问题,可以参考stackoverflow上的相关讨论和问题。

根据stackoverflow上的讨论,没有任何架构的硬性规定,你可以根据自己的需求进行修改。所以,如果你确实需要在Model类中实现INotifyPropertyChanged接口,可以参考这个问题:https://stackoverflow.com/questions/6922130

在这个讨论中,有足够的观点来涵盖双方的论点,你可以看看哪个观点更符合你的项目需求。这个讨论的链接是:https://stackoverflow.com/a/2804565/4303098

这些讨论可能会帮助你实现INotifyPropertyChanged接口。

0