gpt4 book ai didi

.net - 使用 List 作为 ItemsControl 的 ItemsSource 会导致不应用 DataTemplate

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

我创建了一个自定义面板(MyCustomControl),它可以包含其他控件并且可以通过依赖属性进行配置。在不同的用户控件 (MyUserControl) 中,我在 XAML 中配置了多个 MyCustomControl 实例。

在用户控件之外,我试图将 ItemsControl (myItemsControl) 绑定(bind)到运行时存在于 MyUserControl 中的 MyCustomControls 列表。因此,我通过依赖属性从 MyUserControl 公开了 List。

我遇到了这种策略的意外行为。我希望 ItemsControl 获取 List 并将内部的每个控件实例用作具有可以填充 ItemsControl 的 DataTemplate 的数据值的对象。但是,它没有这样做。相反,它基本上完全忽略了 DataTemplate,而只是重新渲染列表/ItemsSource 中的所有控件。

总之,如果我使用控件列表作为 ItemsControl 的 ItemsSource,它不会将它们用作数据对象,而是将它们呈现为控件实例。

令人惊讶的是,如果我尝试做同样的事情但使用 ListBox 而不是 ItemsControl,数据绑定(bind)将按预期工作。由于其他原因,我不想使用 ListBox。有谁知道影响此行为的 ListBox 和 ItemsControl 之间的区别是什么?

编辑:我发现另一个用户遇到了同样的问题,但这里没有列出解决方案:msdn social forum post

最佳答案

使用 Reflector 检查 ItemsControl 代码后,如果项目是 UIElement,IsItemItsOwnContainerOverride 方法将返回 true。您可以创建 ItemsControl 的子类,并将此方法更改为:

protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is ContentPresenter);
}

如果您随后使用该类而不是 ItemsControl,它将按预期工作,但不会具有 ListBox 的不良功能。

关于.net - 使用 List<UIElement> 作为 ItemsControl 的 ItemsSource 会导致不应用 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/677171/

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