我们使用Caliburn Micro已有一段时间了,除了一件事以外,其他所有功能都很好。
有时我们的一个视图需要获取更新的视图模型。当我们有了新的viewmodel时,我们将更新view-viewmodel绑定,如
public void ChangeContext(Screen viewModel, Screen newContext)
{
if (viewModel != null)
{
var view = (Window)viewModel.GetView();
ViewModelBinder.Bind(newContext, view, null);
}
}
这通常可行,并且我们的控件确实会在视图中更新。
但是所有动作绑定和防护(CanDoSomething属性)不会更新。如果我有一个带有x:Name="Click"
的按钮,则CanClick
属性将不用新的视图模型刷新。如果单击该按钮,该方法将在 old 视图模型上调用。
使用ViewModelBinder.Bind(...)
之后是否不应该刷新这些绑定?
有趣的是,如果我(在新的视图模型上)显式调用NotifyOfPropertyChanged(() => CanClick)
,它将根本不会触发。似乎绑定根本不存在。
感谢您的任何建议!