gpt4 book ai didi

wpf - 您如何导航复杂的可视化树以重新绑定(bind)现有元素?

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

ContentPresenter

在上图中,child 是 ContentPresenter。它的内容是一个 ViewModel。但是,它的 ContentTemplate 为空。

在我的 XAML 中,我有一个 TabControl 具有以下结构:

<local:SuperTabControlEx DataContext="{Binding WorkSpaceListViewModel}"
x:Name="superTabControl1" CloseButtonVisibility="Visible" TabStyle="OneNote2007" ClipToBounds="False" ContentInnerBorderBrush="Red" FontSize="24" >
<local:SuperTabControlEx.ItemsSource>
<Binding Path="WorkSpaceViewModels" />
</local:SuperTabControlEx.ItemsSource>

<TabControl.Template>
<ControlTemplate
TargetType="TabControl">
<DockPanel>
<TabPanel
DockPanel.Dock="Top"
IsItemsHost="True" />
<Grid
DockPanel.Dock="Bottom"
x:Name="PART_ItemsHolder" />
</DockPanel>
<!-- no content presenter -->
</ControlTemplate>
</TabControl.Template>

<TabControl.Resources>
<DataTemplate DataType="{x:Type vm:WorkSpaceViewModel}">

....

WorkSpaceViewModels 是 WorkSpaceViewModel 的 ObservableCollection。此代码使用 Keeping the WPF Tab Control from destroying its children 中的代码和技术.

正确的 DataTemplate - 上面显示在 TabControl.Resource 中 - 似乎正在为两个选项卡呈现我的 ViewModel。

但是,我的基本问题是,我的 View 如何连接到我的 WorkSpaceViewModel,但是 ContentPresenter 上的 ContentTemplate 为空?我的要求是从 ViewModel 访问可视组件,因为在某些用户操作后, View 的设置与 ViewModel 中的属性解除绑定(bind),我需要重新绑定(bind)它。

最佳答案

DataTemplate 是“隐式”定义的。 ContentPresenter 将首先使用它的 ContentTemplate/Selector(如果已定义)。如果不是,那么它将搜索没有显式 x:Key 且其 DataType 与其 Content 类型匹配的 DataTemplate 资源。

这是讨论 herehere .

View 模型不应该真正知道它的关联 View 。听起来您的绑定(bind)有问题,因为通常您不必“重新绑定(bind)”它们。无论哪种方式,attached behavior将是实现这一目标的好方法。

关于wpf - 您如何导航复杂的可视化树以重新绑定(bind)现有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747606/

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