绑定到对象本身,当单个属性更改时不会更新

问题描述 投票:0回答:3

在列表框中,我列出了具有许多属性的对象,并且由于我同时渲染所有对象和它的通用对象,因此我将绑定到对象本身。

<local:ItemRenderer ItemReference="{Binding Path=."}/>

问题是,当基础对象更新属性之一时,OnPropertyChanged不会触发绑定更新。当任何属性更改时,是否有办法触发绑定更新?

一个想法是拥有一个仅用于通知的属性,但是底层的ObservableCollection是Object的类型,添加BindingNotifier="{Binding Path=BindingNotifier"}是无法识别的,将无法正常工作。

c# .net wpf xaml data-binding
3个回答
2
投票

将控件或视图或页面的数据上下文重置为null,然后将其交换回最近更改的实例。 将其更改为相同的引用不起作用...一个需要两个步骤


这里是实际代码,由于在类似情况下为了更改Views控件而从命令执行更改(从VM执行以保持VM和View操作分开),我需要以相同的方式触发控件。

下面的代码中发生了相同的情况,其中通知更改的单个属性没有更新CurrentBatch上的整个实例绑定。必须更新其他控件以表示有关CurrentBatch的某些更改。...

public MainWindow() { DataContext = VM = new CertifyingVM(); VM.CommandRefreshBindings = new OperationCommand(o => { MainAccessionHeader.DataContext = MainHeader.DataContext = null; MainAccessionHeader.DataContext = MainHeader.DataContext = VM; var currentBatch = VM.CurrentBatch; MainAccessionHeader.CurrentBatch = null; MainAccessionHeader.CurrentBatch = currentBatch; }); VM.LockBatchGui = new OperationCommand(o => { ... }


[OperationCommand是我的ICommand操作,已在我的标题为Xaml: MVVM Example for Easier Binding的博客文章中进行了演示。

如何触发它取决于您,只需将datacontext的值删除为null,然后将其重新设置。


1
投票
您可以使用IMultiValueConverter实现,并绑定到对象本身和随对象的任何属性改变而改变的属性:

0
投票
这太简单了-只需添加一个属性
© www.soinside.com 2019 - 2024. All rights reserved.