Tag: inotifypropertychanged

使用INotifyPropertyChanged绑定到Silverlight中的字典

在Silverlight中,我无法让INotifyPropertyChanged在绑定到字典时像我想要的那样工作。 在下面的示例中,页面可以正常绑定到字典,但是当我更改其中一个文本框的内容时,不会调用CustomProperties属性setter。 CustomProperties属性设置器仅在设置CustomProperties时调用,而不是在设置其中的值时调用。 我试图对字典值进行一些validation,所以我希望在字典中的每个值都改变时运行一些代码。 我能在这做什么吗? C# public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); MyEntity ent = new MyEntity(); ent.CustomProperties.Add(“Title”, “Mr”); ent.CustomProperties.Add(“FirstName”, “John”); ent.CustomProperties.Add(“Name”, “Smith”); this.DataContext = ent; } } public class MyEntity : INotifyPropertyChanged { public event PropertyChangedEventHandler System.ComponentModel.INotifyPropertyChanged.PropertyChanged; public delegate void PropertyChangedEventHandler(object sender, System.ComponentModel.PropertyChangedEventArgs e); private Dictionary _customProps; public Dictionary […]

POCO和多个ViewModel指向同一个POCO?

怎么会处理这样的情况呢? 让多个ViewModel具有对同一POCO对象的引用。 ViewModel A更新POCO …现在ViewModel B需要以某种方式了解这一点?

WPF绑定到集合中所有项的属性

我需要绑定到bool属性,只有当集合中的某个属性为true时才是true。 这是绑定: 和viewmodel: public class MainWindowViewModel : INotifyPropertyChanged { private ObservableCollection _tabs; public ObservableCollection Tabs { get { return _tabs; } set { if (value != _tabs) { _tabs = value; NotifyPropertyChanged(); } } } Tab类还具有属性更改通知: public class Tab : INotifyPropertyChanged { public bool IsBusy { get{…} set{…NotifyPropertyChanged();} } 这是转换器: public class BusyTabsToStateConverter : IValueConverter […]

WPF – 为基类实现System.ComponentModel.INotifyPropertyChanged

我想为基类上的属性实现System.ComponentModel.INotifyPropertyChanged接口,但我不太清楚如何连接它。 这是我想收到通知的属性的签名: public abstract bool HasChanged(); 我的基类中的代码用于处理更改: public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(String info) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(info)); } } 如何在基类中处理事件的连接而不必在每个子类中调用OnPropertyChanged()? 谢谢, 桑尼 编辑:好的…所以我认为当HasChanged()的值发生变化时,我应该调用OnPropertyChanged(“HasChanged”) ,但我不确定如何将它导入基类。 有任何想法吗?

在Entity Framework和WPF UI中显示计算属性

我的EF数据模型中有一个下载实体。 它的两个属性Size和BytesDownloaded计算得到我在partial类中创建的Progress属性: partial class Download { public int Progress { get { if (!Size.HasValue || Size.Value == 0) return 0; return Convert.ToInt32(Math.Floor(100.0 * ((double)BytesDownloaded / (double)Size))); } } } 在我的WPF UI中,我有: 由于Progress不是实体模型(edmx)的一部分,因此我必须通知UI它应该更新ProgressBar。 我以为我可以这样做: partial void OnBytesDownloadedChanging(long value) { ReportPropertyChanging(“Progress”); } partial void OnBytesDownloadedChanged() { ReportPropertyChanged(“Progress”); } 这编译很好,但是当我运行应用程序并调用OnBytesDownloadedChanging / Changed时,我在调用ReportPropertyChanging / Changed时遇到此exception: 属性“Progress”在实体对象上没有有效的实体映射。 有关更多信息,请参阅Entity Framework文档。 我理解错误信息的内容,但我不明白我能做些什么才能真正实现我的目标。 […]

避免在每个setter中调用RaisePropertyChanged

我想摆脱模型类中占用空间和重复性的RaisePropertyChanged-Properties。 我想要我的模特class…… public class ProductWorkItem : NotificationObject { private string name; public string Name { get { return name; } set { if (value == name) return; name = value; RaisePropertyChanged(() => Name); } } private string description; public string Description { get { return description; } set { if (value == description) return; description […]

INotifyPropertyChange~当属性是一个集合并且一个新项目被添加到集合时,PropertyChanged不会触发

我有一个实现INotifyPropertyChanged接口的类。 该类的一些属性是List类型。 例如: public List Answers { get { return _answers; } set { _answers = value; onPropertyChanged(“Answers”) } } … private void onPropertyChanged(string propertyName) { if(this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } 如果我将一个新的List 分配给Answer,那么PropertyChanged事件将按预期触发; 但是如果我使用List Add方法将一个字符串字符串添加到Answer列表中,则不会触发PropertyChanged事件。 我正在考虑向我的类添加一个AddAnswer()方法,它将处理调用列表的Add方法并从那里调用onPropertyChanged(),但这是正确的方法吗? 有更优雅的方式吗? 干杯,KT

WPF DataBinding:取消了属性更改 – Combobox未对齐

我有一个带有combobox和文本框的WPF表单(两者都是数据绑定到Object的属性)。 更改combobox或文本框输入会更新Object的属性,数据绑定会启动并更新UI。 问题是,我实现了一种取消更改的方法,这种方式有效,但却搞砸了UI更新。 如果我从combobox中进行更改并取消它,combobox不会将选定的值恢复为应该的值(由对象的值绑定)。 如果我从文本框进行更改并取消它,文本框和combobox都显示正确的数据,但然后焦点立即被给予combobox(当它应该留在文本框上,因为这是我有的最后一个地方它)。 我不确定如何在一般方面解决这个问题,因为它决定处理变更事件并validation之后没有取消变更(因为那时数据绑定的重点是什么?)…… //User.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; namespace MyTesting { public class User : AbstractEntity { public User() { Rankings = new Dictionary(); Rankings.Add(1, “Newbie”); Rankings.Add(10, “Novice”); Rankings.Add(25, “Adept User”); Rankings.Add(50, “Power User”); Rankings.Add(100, “Admin God”); } public Dictionary Rankings { get; set; } private Int32 _rank; […]

如果模型实现了INotifyPropertyChanged,ViewModel应该如何注册/取消注册PropertyChanged事件?

我有一个实现INotifyPropertyChanged的模型,它可能会被后台业务线程更新。 其相关的ViewModel还实现了INotifyPropertyChanged 。 他们的View显然与ViewModel绑定。 此视图可能会显示在多个位置,我的目标是在模型更改时更新所有这些视图。 我知道ViewModel应该注册Model的PropertyChanged事件。 但我不知道注册和取消注册的最佳位置何时何地。 特别是关于取消注册,因为我害怕在模型上有数百个VM事件处理程序,用于VM /视图,不再显示。 提前致谢。

如何在WinRT中使用INotifyPropertyChanged?

我是一个新手,只是学习DataContext和MVVM模型的基础知识。 我现在有一个网格绑定到一个实现INotifyPropertyChanged的视图模型对象,但是看起来UpdateSourceTrigger (所有WPF教程告诉我使用它)不适用于WinRT / Metro Style应用程序! 那我如何实现INotifyPropertyChanged呢? 我在这里的绳索尽头。 我花了将近一天的时间在最基本的应用程序示例上,只是在点击某些内容后尝试更新网格。 到目前为止,我设法做到这一点的唯一方法是创建一个全新的视图模型实例并重新分配我知道错误的DataContext 更新: 我取得了一些进展,但事情变得非常奇怪。 我有一个视图模型,带有一个通用的项目列表。 项目列表与PropertyChangedEventHandler连接。 如果我用新的集合替换整个集合,listview会更新。 model.Items = new List{ new DataItem{ Title = “new item” }}; 这导致具有上述项目的一个项目列表。 但是,如果我尝试添加项目,则没有任何反应 model.Items.Add(new DataItem{ Title = “added item” }); 我也尝试创建一个添加项目并专门解雇PropertyChanged的方法,但这也不起作用 这就是它变得奇怪的地方。 接下来我尝试了这段代码。 model.Items.Add(new DataItem { Title = “added item” }); model.Items = new List { new DataItem { Title […]