使用 Prism 在样式内绑定
Binding Inside a Style with Prism
我正在研究 Prism Github 存储库中提供的示例代码,但我对特定行感到困惑。
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding DataContext.Title}" />
</Style>
为什么Binding要指定DataContext
属性?我的理解是默认情况下绑定源是元素的 DataContext
。是因为它在风格上吗?此处的绑定源似乎是 TabItem
,您必须显式访问 DataContext 属性。
绑定 不是 相对于样式的 TargetType。绑定路径在应用 Style 后针对 FrameworkElement 的当前 DataContext 进行解析(除非某些内容更改了 Source,例如显式设置 Source、RelativeSource 或 ElementName)。
这里发生了什么 Prism RegionManager 使用 ViewA/ViewB 作为 TabItem 的 DataContext。使用以下代码确认:
<TabControl prism:RegionManager.RegionName="ContentRegion" Margin="5"
SelectionChanged="TabControl_SelectionChanged"/>
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var tabControl = (TabControl)sender;
var idx = tabControl.SelectedIndex;
if (idx >= 0)
{
var item = tabControl.ItemContainerGenerator.ContainerFromIndex(idx) as TabItem;
var dc = item.DataContext; // ViewA or ViewB
}
}
ViewA/ViewB是控件,有自己的DataContext(对应视图模型)。 TabItem Header 绑定到嵌套 DataContext 中的 属性,这就是绑定路径
中存在 DataContext
的原因
我正在研究 Prism Github 存储库中提供的示例代码,但我对特定行感到困惑。
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding DataContext.Title}" />
</Style>
为什么Binding要指定DataContext
属性?我的理解是默认情况下绑定源是元素的 DataContext
。是因为它在风格上吗?此处的绑定源似乎是 TabItem
,您必须显式访问 DataContext 属性。
绑定 不是 相对于样式的 TargetType。绑定路径在应用 Style 后针对 FrameworkElement 的当前 DataContext 进行解析(除非某些内容更改了 Source,例如显式设置 Source、RelativeSource 或 ElementName)。
这里发生了什么 Prism RegionManager 使用 ViewA/ViewB 作为 TabItem 的 DataContext。使用以下代码确认:
<TabControl prism:RegionManager.RegionName="ContentRegion" Margin="5"
SelectionChanged="TabControl_SelectionChanged"/>
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var tabControl = (TabControl)sender;
var idx = tabControl.SelectedIndex;
if (idx >= 0)
{
var item = tabControl.ItemContainerGenerator.ContainerFromIndex(idx) as TabItem;
var dc = item.DataContext; // ViewA or ViewB
}
}
ViewA/ViewB是控件,有自己的DataContext(对应视图模型)。 TabItem Header 绑定到嵌套 DataContext 中的 属性,这就是绑定路径
中存在DataContext
的原因