gpt4 book ai didi

c# - ListBox 中的嵌套数据模板

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

有什么方法可以仅从 XAML 中创建 DataTemplate 引用本身吗?在这种特殊情况下,试图从包含在同一 DataTemplate 中的 ListBox 引用 DataTemplate。这是我想要的解决方案,但它不起作用。

  <DataTemplate x:Key="nestedItem" DataType="{x:Type local:NestedItem}">
<Expander Header="{Binding Path=Name}">
<ListBox ItemsSource="{Binding Path=Items}" x:Name="itemsList"
ItemTemplate="{StaticResource nestedItem}"/>
</Expander>
</DataTemplate>

这是我目前正在使用的有效解决方案。

  <DataTemplate x:Key="nestedItem" DataType="{x:Type local:NestedItem}">
<Expander Header="{Binding Path=Name}" Expanded="OnItemExpanded">
<ListBox ItemsSource="{Binding Path=Items}" x:Name="itemsList"/>
</Expander>
</DataTemplate>

后面有代码:

private void OnItemExpanded(object sender, RoutedEventArgs e)
{
if (e.OriginalSource != sender) return;
var source = (Expander) sender;
ListBox listBox = source.FindName("itemsList") as ListBox;
NestedItem item = source.DataContext as NestedItem;
listBox.ItemsSource = item.Items;
listBox.ItemTemplate = (DataTemplate) FindResource("nestedItem");
}

最佳答案

如果您将内部引用更改为 DynamicResource 而不是 StaticResource,那么它将按照您的意愿工作。这是因为 there are some differences了解 StaticResource 和 DynamicResource 如何实际查找资源项。

<DataTemplate x:Key="Local_NestedItem"
DataType="{x:Type local:NestedItem}">
<Expander Header="{Binding Path=Name}">
<ListBox ItemsSource="{Binding Path=Items}"
x:Name="itemsList"
ItemTemplate="{DynamicResource Local_NestedItem}" />
</Expander>
</DataTemplate>

此外,如果您不介意使用一些代码,另一个不错的选择是使用 DataTemplateSelector

关于c# - ListBox 中的嵌套数据模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100269/

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