我的 MVVM 应用程序有许多从基本用户控件继承的视图,这些控件公开了一个“ID”属性。在 XAML 中,这绑定到视图的基础视图模型上的 ID 属性,简单地说:
Id="{Binding Path=Id}"
视图模型实现了 INotifyPropertyChanged,它的 ID 在构造函数中设置。ID 用于唯一标识每个视图/视图模型,主要由“桌面管理器”用于管理主窗口中的用户控件,就像 MDI 应用程序一样。当我的应用程序启动时,我实例化各种视图模型及其视图,并将视图模型分配给视图DataContext
。然后我将视图传递给桌面管理器,桌面管理器将它们放置在画布上,定位它们等。
我遇到的问题是,此时视图的 ID 仍然为空,并且似乎只是在一段时间后才绑定到数据上下文(也许当 UI 被渲染时?)。我试过像这样强制绑定,但它没有帮助: -
var bindingExpression = widget.GetBindingExpression(DesktopElement.IdProperty);
bindingExpression.UpdateTarget();
这不是世界末日,因为我可以将我的视图和视图模型中的 ID 传递给桌面管理器,但感觉有点 hacky。我很想知道绑定发生在控件/窗口生命周期的哪个时间点,以及是否有其他方法可以强制绑定发生?
提前感谢安迪