问题标签 [propertychanged]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
315 浏览

inotifypropertychanged - PropertyChanged EventHandler 的实现在哪里?

我有点困惑。当我实现 INotifyPropertyChanged 接口时,我不明白实际执行了什么代码。正如我想象的那样,链条是这样的:

  • 我的班级暗示 INotifyPropertyChanged=>
  • 每个属性的 setter 调用
    NotifyPropertyChanged 方法=>
  • PropertyChangedEventHandler
    调用=>???

我想知道是什么代码使我的控件重新呈现。谢谢。

0 投票
1 回答
133 浏览

c# - 甚至没有检查设置器中的值评估

我在复合控件中有一个属性,用于在实际设置相关的私有字段并执行其他一些操作之前检查值是否已更改。

但是,它似乎从未评估过该声明。

这是该属性的代码:

我已经单步执行了代码,每次到达“value != mySearchCriteria”时,它都会评估为 false 并跳过 if 语句中的代码。事实上,即使我将其更改为“value == mySearchCriteria”,它也会这样做。如果只是完全跳过它,无论它如何评估!

什么嘿?

我尝试更改检查中参数的顺序,并使用 object.Equals() 但这些更改都没有任何区别。

我已经覆盖了 Equals、!=、== 和 GetHashCode。

在代码中的其他地方,它对这些对象类型使用“==”和“!=”没有问题,所以我知道我的覆盖工作正常。

问题是,这甚至不会触及被覆盖的方法。我在 "=="、"!="、"Equals" 和 "GetHashCode" 上放置了中断,并且在评估 "value != mySearchCriteria" 语句时没有调用它们。

就像它完全跳过评估它一样。

0 投票
1 回答
11760 浏览

textbox - 当文本输入的强制导致源值未更改时,不更新 TextBox 上的文本,其中 UpdateSourceTrigger=PropertyChanged

我有一个文本框,其Text属性有一个TwoWay MultiBinding,其中UpdateSourceTrigger设置为PropertyChanged。第一个Binding是一个依赖属性 ( Value ),它有一个PropertyChangedCallBack函数,该函数将值四舍五入到小数点后一位。

文本框的目的是在用户键入时执行舍入,而不是在文本框失去焦点时执行舍入,因此UpdateSourceTrigger设置为PropertyChanged

我遇到的问题是,如果输入的文本不会导致更改,则文本属性和会不同步。只有当舍入操作导致Value发生变化时, Text才会即时更新。例如,如果TextValue都是 123.4 并且用户在此之后键入 1,则Value将四舍五入为相同的值 (123.4),但Text显示 123.41。但是,如果在 4 之后键入 9,则Value向上舍入为 123.5。并且由于这种实际变化,文本随后更新为相同的 (123.5)。

即使自上次触发以来源没有更改,是否有任何方法可以强制文本框从其源更新?我尝试过使用BindingExpressionBase.UpdateTarget(),但这仅在UpdateSourceTrigger设置为Explicit时有效,因为在可以调用UpdateTarget的合适时间(例如TextInput处理程序)之前不再更新Value,因此无法使用。我尝试了其他方法,例如从绑定的Value中显式更新Text值,暂时强制对Value进行实际更改以调用更新,但是这些“黑客”要么不起作用,要么导致其他问题。

任何帮助将不胜感激。

代码如下。

XAML 片段

C# 片段

需要转换器类

0 投票
1 回答
293 浏览

wpf - 在reference.cs中将referenceequals更改为equals

我有一个使用 wcf 网络服务的 wpf 应用程序。它是我的网络服务和应用程序,所以我可以对任何一方进行更改。在 Visual Studio 自动生成的 Reference.cs 文件中,它将以下代码用于属性更改事件:

对于字符串,虽然我真正想要的是:

这样,如果值相同,属性更改事件就不会发生。为什么这是一个问题是因为我收听文本框的 OnPreviewTextInput 并以编程方式更改值,然后事件发生两次,一次是因为我更改了它,一次是因为 wpf 通过绑定更改了它。

谢谢,

0 投票
3 回答
4000 浏览

c# - 为什么使用这个构造 - PropertyChangedEventHandler handler = this.PropertyChanged?

文章http://msdn.microsoft.com/en-us/magazine/dd419663.aspx具有以下代码示例:

我的问题是通过引入变量“处理程序”可以获得什么 - 以下代码似乎工作正常:

0 投票
1 回答
1182 浏览

c# - 更新泛型类的泛型属性?

我是 C# 的新手,Generic Classes所以我不知道我们是否可以动态更新泛型类的泛型属性?

假设我有一堂课

我们可以编写一个扩展,将给定的属性更新 1 吗?

任何帮助将不胜感激!

0 投票
1 回答
440 浏览

wpf - 将数据插入 XML 文件通知 ObservableCollection

我有一个父窗口,它有一个绑定到从 XML 文件中获取数据的 ObservableCollection 的 ListView。在父窗口上,我有一个添加按钮,可以打开一个模态窗口(form2.ShowDialog(),我认为这是一个模态窗口)。

在子窗口中,我有几个文本字段和一个添加按钮,用户输入新记录的数据并单击添加按钮,XML 文件将更新为新记录。

我想要做的是当子窗口关闭时,父窗口中的 ListView 被刷新以显示新记录。

当我从子窗口更新 XML 文件时,我直接对 XML 文件执行此操作,我是否应该以其他会在 ObservableCollection 上引发事件的方式将数据添加到文件中?

我正沿着向父窗口上的添加按钮添加事件处理程序的路径前进,并尝试强制重新读取 XML 文件,但我不知道如何实现这一点,以下是我到目前为止所做的.

form1.xaml.vb:

我无法锻炼应该进入 refresh_EmContacts 子的内容,我是否需要调用某种 ObservableCollection 事件处理程序来通知它已更新并重新读取?

任何帮助将不胜感激。

马特

0 投票
4 回答
10285 浏览

c# - 为什么我不能从扩展方法调用 PropertyChanged 事件?

我试图编写一个类来避免像“RaisePropertyChanged”这样的方法。我知道我可以从具有该实现的类继承,但在某些情况下我不能。我尝试过扩展方法,但 Visual Studio 抱怨。

它说:

“事件‘ System.ComponentModel.INotifyPropertyChanged.PropertyChanged’只能出现在+=或-=的左侧

0 投票
1 回答
1930 浏览

c# - 从反射中使用 PropertyChanged

我想在使用反射更改对象属性时收到通知。

这是 mjpeg.dll 中的一类:

在我的 camera.cs 中,我将 MJPEGConfiguration 对象设置为“对象配置”并将 PropertyChanged 事件添加到该对象:

但是,我在“Delegate dg = ....”行中收到 ArgumentException(Error binding to Target Method) 我该如何解决这个问题?或者有什么正确的方法可以做到这一点?

0 投票
1 回答
25328 浏览

c# - 如何使用 PropertyChangedCallBack

我有一个绑定到依赖属性的 TextBox,我已经实现了 PropertyChangedCallBack 函数,当文本更改时我需要调用 textbox.ScrollToEnd() 但我不能,因为 PropertChanged 函数需要是静态的,有没有办法解决这个问题?