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