gpt4 book ai didi

c# - 转义WPF DataContext

转载 作者:行者123 更新时间:2023-12-03 10:36:26 25 4
gpt4 key购买 nike

我对MVVM特别陌生。

我有以下XAML代码:

<ListBox x:Name="lsbTriggers" ItemsSource="{Binding SelectedProductPart.TriggerViewModels}">
<ListBox.ItemTemplate>
<HierarchicalDataTemplate >
<ComboBox SelectedItem="{Binding WatchedVariable}"
ItemsSource="{Binding SelectedProductPart.AllVariables}" >
</ComboBox>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>

我正在尝试制作一个列表,其中包含每个TriggerViewModel的组合框。

组合框的选定项由TriggerViewModel的WatchedVariable属性确定。

但是,我希望组合框的ItemsSource是SelectedProductPart对象提供的变量的列表。
我似乎无法执行此操作,因为如果您要在TriggerViewModels上使用数据上下文,则该上下文已“放大”,因为它是列表的ItemsSource。

我尝试在组合框内创建一个新的DataContext,但这似乎会创建两个断开连接的DataContext,其中更改组合框的值不会导致更改TriggerViewModel的WatchedVariable。

有没有一种方法可以逃避当前的DataContext,以便可以进入SelectedProductPart的AllVariables列表?

最佳答案

您必须使用Binding显式方式来指定其来源(通过ElementNameSourceRelativeSource)。在这种情况下,我们使用RelativeSource。它有助于遍历可视化树并根据其类型(AncestorType)定位源:

<ListBox x:Name="lsbTriggers" ItemsSource="{Binding SelectedProductPart.TriggerViewModels}">
<ListBox.ItemTemplate>
<HierarchicalDataTemplate >
<ComboBox SelectedItem="{Binding WatchedVariable}"
ItemsSource="{Binding DataContext.SelectedProductPart.AllVariables,
RelativeSource={RelativeSource AncestorType=ListBox}}" >
</ComboBox>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>

请注意, Path之前带有 DataContext

关于c# - 转义WPF DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658552/

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