首页 > 解决方案 > 将 DataContext 设置为 Ancestor win WPF/Xaml 后如何引用本地属性

问题描述

我有一些 UserControl 字段,它们在用户控件内提供了一个文本框。我将 UserControl 引用为:

<UserControl 
DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}" />

我将其设置为此是因为我的 UserControls 位于共享一些常用命令等的视图模型中,因此我可以将这些属性绑定到我的外部 ViewModel:

这是按要求工作的。问题是每个 UserControl 都有自己的视图模型,以便跟踪诸如 Value 属性之类的东西:

<UserControl 
IsInDesignMode="{Binding IsInDesignMode}" 
Text="{Binding Value}" 
DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}" />

如果我使用:

<UserControl 
IsInDesignMode="{Binding IsInDesignMode, RelativeSource={RelativeSource AncestorType=UserControl}}" 
ControlText="{Binding DataContext.Value}"  />

或者

<UserControl 
IsInDesignMode="{Binding DataContext.IsInDesignMode, RelativeSource={RelativeSource AncestorType=UserControl}}" 
ControlText="{Binding DataContext.Value}" 
 />

ControlText 正确绑定到 UserControl 的 viewmodel 的值,所以这似乎是正确的方法,但是 IsInDesignMode 不会绑定到相同的 view/viewmodel ,因为当我从第一个版本中获得 DataContext= 时。

标签: c#wpfxaml

解决方案


推荐阅读