jjzjj

INotifyPropertyChanged

全部标签

c# - 通过 T4 代码生成自动 INotifyPropertyChanged 实现?

我目前正在设置我的一个新项目,并且想知道我如何才能实现我的ViewModel类确实具有INotifyPropertyChanged支持,而不必自己手动编写所有属性。我研究了AOP框架,但我认为它们只会用另一个依赖项破坏我的项目。所以我考虑使用T4生成属性实现。设置是这样的:我有一个ViewModel类,它仅声明其属性背景变量,然后我使用T4从中生成属性实现。例如,这将是我的ViewModel:publicpartialclassViewModel{privatestringp_SomeProperty;}然后T4将遍历源文件并查找名为“p_”的成员声明并生成如下文件:publicpar

c# - MVVM:精简 ViewModel 和丰富模型

我一直在与MVVM模式作斗争,并且在尝试为小型/中型项目创建实用设计时遇到了许多挑战。其中一项挑战是弄清楚如何在不创建大量重复且难以维护的代码的情况下获得与此模式分离的好处。我目前的策略是创建“丰富”的模型类。他们充分意识到他们将被MVVM模式消耗并实现INotifyPropertyChanged,允许他们的集合被观察并保持认识到他们可能总是被观察。我的ViewModel类往往很薄,仅在实际需要转换数据时才公开属性,其中大部分代码是RelayCommand处理程序。View很乐意直接绑定(bind)到ViewModel或模型,具体取决于是否需要任何数据转换。我使用AOP(通过Posts

c# - 在 C# 中是否有一种很好的强类型方法来处理 PropertyChanged 事件?

更改属性名称一定是比较常见的事件,并且期望VisualStudio中的重命名功能能够处理所有必要的重命名,INotifyPropertyChanged的​​PropertyChanged事件的属性名称除外。有没有更好的方法以某种方式使其强类型化,这样您就不需要记住手动重命名它? 最佳答案 编辑:nameof到达了c#6。耶!没有nameof/infoof等;对此进行了很多讨论,但事实就是如此。有一种方法可以在.NET3.5中使用lambda表达式(并解析表达式树),但实际上不值得为此付出代价。现在,我只坚持使用字符串(如果您决心不破

c# - WPF DataGrid 未在 PropertyChanged 上更新

我在使用NotifyPropertyChanged单击按钮时更新我的​​数据网格时遇到问题。如果我在后面的代码中设置DataGrid.ItemsSource它会起作用,但如果我在xaml中设置它则不会。这是一些代码背后的代码&xaml:namespaceMyWpfDataBindingLab{publicpartialclassNpcWindow:Window{DataCollectiondc=newDataCollection();publicNpcWindow(){InitializeComponent();//commandbindingcode//...}privatevoid

c# - 为什么在 WPF 中将 INotifyPropertyChanged 与绑定(bind)一起使用?

我注意到几乎我在Internet上找到的每个关于绑定(bind)的示例都有一个类(它绑定(bind)到另一个属性)继承了INotifyPropertyChanged接口(interface)并在类属性的set部分使用了一个方法。我已经尝试从绑定(bind)示例中删除该部分,它的工作方式与使用该方法时相同。这是例子。我对其进行了更改,使其成为TwoWay绑定(bind)模式,并在消息框中显示更改后的属性。我这样做只是为了尝试一下绑定(bind),但现在我真的不知道为什么要使用该接口(interface)XAML:主要.cs:usingSystem;usingSystem.Collecti

c# - WPF 什么时候订阅 PropertyChanged 事件?

我有一个ClassA和一个ObservableCollection属性,它实现了INotifyPropertyChanged接口(interface)在我的窗口代码隐藏中,我声明了一个ClassA变量,并在Main()方法中对其进行了初始化。我希望variable.PropertyChanged会有一个WPF事件连接到它,但显然PropertyChanged事件仍然为空 最佳答案 当您绑定(bind)到您的对象时,WPF将订阅PropertyChanged事件。这是数据绑定(bind)工作的核心方式。它实际上是通过PropertyC

c# - 在 setter 中确定调用者——或静默设置属性

给定标准View模型实现,当属性更改时,是否有任何方法可以确定更改的发起者?换句话说,在下面的View模型中,我希望“PropertyChanged”事件的“sender”参数是调用Prop1setter的实际对象:publicclassViewModel:INotifyPropertyChanged{publicdoubleProp1{get{return_prop1;}set{if(_prop1==value)return;_prop1=value;//here,canIdeterminethesender?RaisePropertyChanged(propertyName:"Pr

c# - PropertyGrid 没有注意到代码中的属性更改?

我有一个Winform应用程序,它使用颜色来突出显示某些内容。我想让用户更改“他们的”颜色。作为练习,我想我会创建一个类的实例,其中包含颜色属性,并将其分配给属性网格(以获得一个不错的编辑器)。这似乎工作正常,但我想我想让用户重置颜色(在他们摆弄并将它们设置为20种米色阴影之后)。因此,我在我的表单中添加了一个“重置”按钮,它将我的对象的颜色属性设置回默认值。但是,似乎虽然它设置了我的对象的属性,但属性网格并没有改变。如果在重置后,我执行属性网格“刷新”,它具有重置颜色。我假设属性网格不知道底层对象已更改?在这种情况下是否缺少某些东西,或者我应该接受它并在重置我的对象时调用Refres

c# - 如何从 [Serializable] INotifyPropertyChanged 实现者中排除不可序列化的观察者?

我有将近一百个这样的实体类:[Serializable]publicclassSampleEntity:INotifyPropertyChanged{privatestringname;publicstringName{get{returnthis.name;}set{this.name=value;FirePropertyChanged("Name");}}[field:NonSerialized]publiceventPropertyChangedEventHandlerPropertyChanged;privatevoidFirePropertyChanged(stringpro

c# - ViewModel 上的 ObservableObject 或 INotifyPropertyChanged

我很好奇用ViewModels做什么最好。是实现接口(interface)INotifyPropertyChanged还是派生自ObservableObject更好。ObservableObject类实现了INotifyPropertyChanged并执行了一些无聊的代码,例如RaisePropertyChanged。INotifyPropertyChanged需要实现PropertyChanged事件。从我的角度来看,使用ObservableObject似乎更合乎逻辑,但在大部分教程中,他们在其ViewModel上实现了INotifyPropertyChanged接口(interfa