gpt4 book ai didi

c# - WPF:访问同一控件中的两个 DataContext

转载 作者:行者123 更新时间:2023-11-30 22:48:13 26 4
gpt4 key购买 nike

我正在使用 MVVM 方法,我的 ViewModel 中有一个名为 DatabasesSubFrame 的对象这是DataTemplate d 显示 ListBox .我想显示 ButtonListBox 下面, 它绑定(bind)到当前的 SelectedItem ,以及 DatabasesSubFrame 上的一个属性对象 DataTemplate d.

我知道如何通过设置 DataContext 来引用当前选定的项目在与 ListBox 的共享祖先上并使用 {Binding /} .在此示例中,共享祖先是 StackPanel .如果DataContext没有在那里明确设置我可以很容易地绑定(bind)到 DatabasesSubFrame 上的属性反对只是做 {Binding SomeProperty} .但是,如果我这样做 {Binding SomeProperty}在显式集内 DataContext ,它指错了DataContext .

如何访问“原始”DataContext这里?我尝试弄乱 RelativeSources 和 TemplatedParents,但无法弄清楚如何适应它们。

<DataTemplate DataType="{x:Type VM:DatabasesSubFrame}">
<StackPanel DataContext="{Binding Databases}" >
<ListBox Name="DbInfoBox"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding ShortName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!-- Problem: The Command and V:CreateCommandBinding.Command are set incorrectly here. How do I access OpenDbCommand from the top-level DataTemplate's DataContext? -->
<Button Content="Open Database"
CommandParameter="{Binding /}"
Command="{Binding ???, Path=OpenDbCommand.Command}"
V:CreateCommandBinding.Command="{Binding ???, Path=DataContext.OpenDbCommand}"/>
</StackPanel>
</DataTemplate>

最佳答案

我认为this question 将帮助您找到您的答案。另一个技巧是将窗口的名称设置为“Root”之类的名称。然后,您可以使用以下方法获取窗口的原始数据上下文:

{Binding ElementName=Root, Path=DataContext.MyViewModelsProperty}

关于c# - WPF:访问同一控件中的两个 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1818144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com