问题标签 [inotifypropertychanged]
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.
c# - 创建 INotifyPropertyChanged 代理以将调用调度到 UI 线程
我想创建一个动态代理,用于将 WinForms 控件绑定到由不同(非 GUI)线程更改的对象。这样的代理将拦截 PropertyChanged 事件并使用适当的 SynchronizationContext 调度它。
这样我就可以使用辅助类来完成这项工作,而不必每次都手动实现同步(if (control.InvokeRequired) etc.
)。
有没有办法使用 LinFu、Castle 或类似的库来做到这一点?
[编辑]
数据源不一定是列表。它可以是任何业务对象,例如:
我可以创建一个可以完成这项工作的包装器,它看起来像这样:
(这段代码可能有一些错误,我正在弥补)
我想做的是为此设置一个动态代理(Reflection.Emit),例如
我想知道使用现有的动态代理实现是否可以实现这样的事情。
一个更普遍的问题是:创建动态代理时如何拦截事件?在所有实现中都很好地解释了拦截(覆盖)属性。
[编辑2]
我需要代理的原因(我认为)是堆栈跟踪如下所示:
您可以看到BindToObject.PropValueChanged
没有将sender
实例传递给PropertyManager
,并且 Reflector 显示 sender 对象在任何地方都没有被引用。也就是说,当PropertyChanged
事件触发时,组件会使用反射来访问原始(绑定)数据源的属性。
如果我将我的对象包装在一个只包含事件的类中(如Sam建议的那样),那么这样的包装类将不包含任何可以通过反射访问的属性。
c# - 为什么 TextBlock 可以显示代码隐藏属性值但边框/填充无法使用它?
在下面的 Silverlight 应用程序中,尽管 TextBlock 正确显示了 OuterPadding 的值,为什么属性 OuterPadding 不会更改外边框中的填充? 如果我将边框填充更改为一个简单的整数,则填充工作正常,但当它由后面代码中的属性定义时则不行。
相同的代码在 WPF 中运行良好。
XAML:
代码背后:
wpf - 可观察的和 INotifyPropertyChanged - 是否有连接
我了解IObservable<T>
&IObserver<T>
是观察者模式的实现,可以在与 .Net 事件类似的情况下使用。
我想知道是否有任何关系INotifyPropertyChanged
?
我目前INotifyPropertyChanged
用于 winforms 和 WPF 应用程序中的数据绑定,想知道是否可以在 UI 数据绑定场景中使用 IObservable?
干杯
AWC
c# - WPF:显示属性更改而不实现 INotifyPropertyChanged 接口
在我的 WPF 应用程序中,我有一个布尔属性,我想向用户显示它(例如使用只读复选框)。通常我会实现 INotifyPropertyChanged 以便 WPF 可以对此采取行动并相应地更改复选框。
我现在遇到的问题是这个属性值是从一个封闭的框架中检索的。这意味着,我只能轮询该值,但没有我可以订阅的更改事件。
我的第一个想法是创建一个单独的线程,它定期(比如每 10 毫秒)轮询值并在值更改时创建一个事件。但这对我来说似乎有点矫枉过正。
所以我的问题是:WPF 中是否有显示更改值的功能,而 INotifyPropertyChanged 不是一个选项?也许是某种投票机制?如果没有,您将如何解决这个问题?
谢谢你的时间。
c# - 订阅 WCF 服务的 DataContract 代理类的 PropertyChanged
我喜欢在客户端类上扩展的想法,这些类是使用部分类的 WCF 服务的数据协定。但是我遇到了一个严重破坏聚会的问题。
想象一下在服务器端我有一堂课:
在客户端,我生成了一个代理类,用于业务逻辑层。根据业务逻辑的需要,我这样扩展它:
现在我想确保无论何时位置或大小发生变化,都会调用 Bounds chage 事件。通过代码很容易做到:
问题是放置此代码的好地方在哪里。
如果对象不是由服务调用创建的,我会将其放入构造函数中。但是 WCF 服务忽略客户端的构造函数,看到构造函数没有出现在我的 WCF 客户端中,序列化问题?.
现在,在服务响应之后,我的程序立即搜索数据契约层次结构,获取所需的对象并添加事件处理程序。但我不认为这是一件正确的事情。
所以我很感兴趣在哪里做更好,或者,也许,推理应该改变整个方法。任何想法表示赞赏。
inotifypropertychanged - 预期的 ObservableCollection +NotifyPropertyChanged
您好,我有一些 CMessage 类型的对象列表。CMessage 可以如下所示:
每个属性都有 RaiseNotifyPropertyChanged 方法,它是 INotifyPropertyChanged 接口的实现。重点是:
- 我从 ObservableCollection 消息列表中选择了一些消息;
- 我在我选择的消息中添加了一些答案
为什么没有为该消息执行 RaisePropertyChanged?它应该!
c# - INotifyPropertyChanged 和计算属性
假设我有一个简单的 Order 类,它有一个 TotalPrice 计算属性,可以绑定到 WPF UI
在影响 TotalPrice 计算的属性中调用 RaisePropertyChanged("TotalPrice") 是一种好习惯吗?刷新 TotalPrice 属性的最佳方法是什么?这样做的另一个版本当然是像这样更改属性
并调用 TotalPrice = -1 而不是 this.RaisePropertyChanged("TotalPrice"); 在其他属性中。请提出更好的解决方案
非常感谢
c# - 确定谁/什么调用了 Set Property
我正在尝试确定什么控件称为Set property
. 假设文本框宠物绑定到一个属性。我正在使用INotifyPropertyChanged
,但我想知道是否有办法获得实际控制权。
在sender
我PropertyChanged Event
的是包含属性的类,而不是最初触发导致事件被引发的事件链的控件。
这可能吗?有没有更简单的方法?
data-binding - 为什么绑定刷新延迟到委托命令完成?(MVVM)
我正在应用 MVVM 模式。我有一个按钮,单击该按钮会在我的 ViewModel 中调用委托命令。在该委托方法的一开始,我设置了一个属性值 (WaitOn),它应该通过显示动画控件来通知用户返回 UI 等待。
但是,在委托完成执行之前,显示该动画控件的绑定不会刷新,此时等待已完成。为什么会发生这种情况,我应该怎么做才能解决它?
示例 XAML:
来自 ViewModel 的片段:
现在从 XAML 代码隐藏来捕获引发的事件:
wpf - 如何使用多个 ViewModel 处理一个视图并触发不同的命令?
我有一个场景,其中一个视图和视图与多个 ViewModel 绑定。
例如。一个显示电话详细信息和 ViewModel 的视图,如下所示:
- 电话基本功能-PhoneViewModel,
- 电话价格详情 - PhoneSubscriptionViewModel,
- 手机配件-PhoneAccessoryViewModel
- 对于一般属性 - PhoneDetailViewModel
我已经将 View 的一般属性放到 PhoneViewModel 中。现在的情况是这样的:
默认情况下,View 显示与PhoneViewModel 的 ObservationCollection绑定的 Phone Basic 功能。我的视图有按钮- “查看附件”,单击此按钮一个弹出屏幕-在我的设计中,我有显示/隐藏网格并将其与PhoneAccessoryViewModel 的 ObservationCollection绑定。
现在问题开始了 - 附件列表也有按钮“查看详细信息”onclick 我必须打开一个弹出屏幕,在这里我也放置了一个网格并可见/隐藏它。我已将“ViewAccessoryDetailCommand”命令绑定到“查看详细信息”按钮。并在命令执行时触发一个函数并设置可见弹出屏幕的属性。
使用此类编程命令会触发函数调用,但不会引发属性更改,因此我的视图不会显示弹出窗口。
摘要:一个视图--> ViewModel1-->网格绑定视图ViewModel2-->网格有按钮和Onclick显示与ViewModel3绑定的新网格-此命令触发但属性未引发。
我认为我的方法有问题,请提出您的建议。