视图的 DataContext 始终为 null

DataContext of view is always null

我正在尝试使用 DataContext 属性 在代码隐藏中访问视图的视图模型。但是,无论我在视图生命周期的什么时候尝试访问它,属性 总是 null.

简单的虚拟设置:

// shell
internal class ShellViewModel : Conductor<IScreen>.Collection.OneActive
{
    public ShellViewModel() {
        ActivateItem(new MyTestViewModel());
    }
}

// view code-behind
public partial class MyTestView : UserControl {

    public MyTestView() {
        InitializeComponent();
    }

    protected override void OnInitialized(EventArgs args) {
        var vm = DataContext as MyTestViewModel;
        Debug.Assert(vm != null); // is always null!
    }

}

视图已正确初始化,正在调用视图模型,两者可以绑定在一起。当我将视图模型的 属性 绑定到视图控件时,可以毫无问题地访问它。只有在初始化的时候,视图的DataContext总是null。做什么?

MVVM 框架:Caliburn.Micro

public partial class MyTestView : UserControl {

  public MyTestView() {
    InitializeComponent();
  }
   
  public MyTestViewModel ViewModel() {
    return (MyTestViewModel)Datacontext;
  }
}

无论出于何种原因,这样做都会破坏模式背后的想法,因为不应将视图模型硬编码到视图中。可以理解用于测试目的,但用于任何实际使用;形式不佳。

-- 编辑 -- 我在考虑仅查看操作,但由于某种原因已经晚了,并且没有考虑从视图中访问数据而不是从 ViewModel 中访问视图。

这应该能满足您的需求。只有在框架将视图与视图模型绑定之后(即设置了数据上下文,一旦加载被命中)才会起作用。如果您需要事先做一些事情,我不确定还有什么更好的解决方案。