出于某种原因,我无法在某些控件上绑定到 DataTemplates 中的 ViewModel 属性。绑定本身的结果是不可预测的,有时有效,有时无效。出于这个原因,除了将 ViewModel 设置为 DataContext 之外,我还考虑以其他方式公开 ViewModel。
第一个想法是将 ViewModel 添加到资源集合中。我在 UI 中使用 TabControls,所以每当需要显示视图时,都是通过数据模板完成的。
<DataTemplate DataType="{x:Type vm:SomeViewModel}">
<vw:SomeView />
</DataTemplate>
在这种情况下,视图会自动实例化,并且其 DataContext 设置为模板中设置的 ViewModel。有没有办法让这个 ViewModel 可用于 View 的资源(例如 key=viewModel),这样我就可以像这样使用它:
<TextBlock Text="{Binding SomeProperty, Source={StaticResource viewModel}}" />
我已经尝试将它添加到代码中,在视图的 Loaded 事件中:
this.Loaded += (s, e) =>
{
this.Resources.Add("viewModel", this.DataContext);
};
上面的代码在运行时没有找到静态资源的错误弹出之前执行,因此资源被添加到集合中。
有什么想法我能做什么?