在代码中添加资源并将其用作StaticResource

时间:2012-08-03 10:29:41

标签: wpf xaml mvvm

由于某些原因,我无法在某些控件上绑定到DataTemplates中的ViewModel属性。绑定本身的结果是不可预测的,有时它起作用,有时它不起作用。出于这个原因,除了将其设置为DataContext之外,我还想以其他方式公开ViewModel。

首先想到的是将ViewModel添加到Resources集合中。我正在使用TabControls用于UI,因此每当需要显示视图时,都会通过数据模板完成。

<DataTemplate DataType="{x:Type vm:SomeViewModel}">
    <vw:SomeView />
</DataTemplate>

在这种情况下,视图会自动实例化,并且其DataContext设置为在模板中设置的ViewModel。有没有办法可以将ViewModel提供给View的资源(ex with key = viewModel),这样我就可以这样使用它:

<TextBlock Text="{Binding SomeProperty, Source={StaticResource viewModel}}" />

我尝试在代码中添加它,在视图的

this.Loaded += (s, e) =>
{
    this.Resources.Add("viewModel", this.DataContext);
};

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

任何想法我该怎么办?

1 个答案:

答案 0 :(得分: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]}}