在列表框中,我列出了具有许多属性的对象,并且由于我同时渲染所有对象和它的通用对象,因此我将绑定到对象本身。
<local:ItemRenderer ItemReference="{Binding Path=."}/>
问题是,当基础对象更新属性之一时,OnPropertyChanged
不会触发绑定更新。当任何属性更改时,是否有办法触发绑定更新?
一个想法是拥有一个仅用于通知的属性,但是底层的ObservableCollection
是Object的类型,添加BindingNotifier="{Binding Path=BindingNotifier"}
是无法识别的,将无法正常工作。
将控件或视图或页面的数据上下文重置为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,然后将其重新设置。
IMultiValueConverter
实现,并绑定到对象本身和随对象的任何属性改变而改变的属性: