c# - 将 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= 时。
解决方案
推荐阅读
- reactjs - 如何在 React-Navigation-3 中设置应用容器?
- node.js - 在 Puppeteer 中禁用下载
- c# - 在c#中从标签名称包含冒号(:)的xml元素中读取值
- discord - discord.js 出于某种原因,此命令下的任何代码都不起作用?
- json - 带引号的 Json paser 输出
- c - 程序按余数排序数组 3
- azure-devops - 我可以从 Azure Devops 获得我的 WPF 应用程序的下载链接吗
- pandas - 通过比较两个数据框来填充新行
- typescript - 如何强制参数成为某个对象的属性的构造函数/类的实例?
- java - 如何在需要 Runnable Instance 的地方接受方法引用运算符?