gpt4 book ai didi

wpf - ControlTemplate 的 DataContext 是如何设置的?

转载 作者:行者123 更新时间:2023-12-04 18:09:48 24 4
gpt4 key购买 nike

我正在 Tile 控件(在 Telerik TileList 中)中设置 ControlTemplate。它看起来像这样:

<ControlTemplate TargetType="{x:Type telerik:Tile}">
<Border>

<!-- Some Content that binds to DP on the view models -->

<ContentPresenter Content="{Binding}" />

</Border>
</ControlTemplate>

别处:
<telerik:RadTileList ItemsSource="{Binding ComponentViewModels}">

我为将在 Tile 的 ContentPresenter 中显示的项目定义了 DataTemplates。我遇到的问题是,当将 ComponentViewModel 添加到 ItemsSource (ComponentViewModel ObservableCollection) 的目标时,会出现一个新的 Tile,但它的 DataContext 是 RadTileList 的 ViewModel 而不是单个组件的 ViewModel。

我是否遗漏了有关 ControlTemplate 中 DataContext 设置的内容?

最佳答案

要从 DataTemplate 内部绑定(bind)到附加到父 View 或控件上的 DataContext 的 Presenter 或 ViewModel 上的属性,您必须使用具有值“FindAncestor”的 RelativeSource 属性以及您正在查找的 DataContext 的控件类型.

我见过的最常见的错误是人们忘记对 AcestorType 属性使用 {x:Type yourControlType} 标记扩展,而是使用“AncestorType=yourControlType”。

下面是一个例子:

Width="{Binding DataContext.SomeProperty, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"

其中“SomeProperty”是遵循 INotifyPropertyChanged 模式的 Presenter 或 ViewModel 上的属性。

Width 是 ControlTemplate 中控件的属性

关于wpf - ControlTemplate 的 DataContext 是如何设置的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17175749/

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