gpt4 book ai didi

silverlight - TreeViewItem.ItemContainerGenerator.ContainerFromItem 结果不一致

转载 作者:行者123 更新时间:2023-12-01 00:29:17 28 4
gpt4 key购买 nike

我的页面上有一个 TreeView。它绑定(bind)到包含契约(Contract)的客户集合,例如:

public class Client
{
public int ClientID { get; set; }
public string Name { get; set; }
public List<Contract> Contracts { get; set; }
}

public class Contract
{
public int ContractID { get; set; }
public int ClientID { get; set; }
public string Name { get; set; }
}

我的 TreeView 的 XAML 如下:

<sdk:TreeView x:Name="tvClientContract" ItemsSource="{Binding ClientContracts}">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Contracts}">
<TextBlock Text="{Binding Path=Name}" />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>

其中 ClientContracts 是 List<Clients> .绑定(bind)工作正常,我有一个分层网格。

我遇到的问题是打开带有 TreeView 的表单时我想选择当前客户端,我目前使用以下代码:

TreeViewItem client = (TreeViewItem)tvClientContract.ItemContainerGenerator.ContainerFromItem(aClient);

TreeViewItem client = (TreeViewItem)tvClientContract.ItemContainerGenerator.ContainerFromIndex(tvClientContract.Items.IndexOf(aClient));
client.IsSelected = true;

但这会返回不一致的结果,例如,我在选择客户端“ABC”时打开表单,而客户端将为空。选择客户端“ABC”并返回正确的 TreeViewItem 时我再次打开它。以前有没有人遇到过这个问题,或者知道我可以引用什么来帮助解决这个问题?

我在 TreeView 的 Loaded 事件中运行上面的代码。

最佳答案

我弄清楚这里发生了什么,线索在 MSDN 文档中关于 ItemContainerGenerator.ContainerFromItem() 的返回值:

A UIElement that corresponds to the given item. Returns null if the item does not belong to the item collection, or if a UIElement has not been generated for it.

看起来当返回 null 时,尚未为该项目创建 UIElement。

我通过使用

解决了这个问题

tvClientContract.UpdateLayout();

在调用之前更新布局并确保 UIElement 存在

ItemContainerGenerator.ContainerFromItem()

关于silverlight - TreeViewItem.ItemContainerGenerator.ContainerFromItem 结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363352/

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