0

出于某种原因,我无法在某些控件上绑定到 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);
};

上面的代码在运行时没有找到静态资源的错误弹出之前执行,因此资源被添加到集合中。

有什么想法我能做什么?

4

1 回答 1

0

您可以将 ViewModel 定义为 XAML 中的资源,如下所示:

<vm:SomeViewModel x:Key="ViewModel"/>

如果要在 DataTemplate 中绑定到 DataContext,可以使用以下命令:

{Binding Path=DataContext, ElementName=uc}

假设您的窗口/用户控件名称是 x:Name="uc" ,或者如@stukselbax 所写:

{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=[UserControl|Window]}} 
于 2012-08-03T10:50:07.667 回答