Fer*_*min 2 silverlight treeview silverlight-4.0
我的页面上有一个TreeView.它绑定到包含合同的客户端集合,例如:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
ClientContracts是一个List<Clients>.绑定工作正常,我有一个分层网格.
我遇到的问题是打开带有TreeView的表单时我想选择当前的Client,我目前使用以下代码:
TreeViewItem client = (TreeViewItem)tvClientContract.ItemContainerGenerator.ContainerFromItem(aClient);
Run Code Online (Sandbox Code Playgroud)
要么
TreeViewItem client = (TreeViewItem)tvClientContract.ItemContainerGenerator.ContainerFromIndex(tvClientContract.Items.IndexOf(aClient));
client.IsSelected = true;
Run Code Online (Sandbox Code Playgroud)
但这会返回不一致的结果,例如我选择客户端'ABC'时打开表单,客户端将为null.当选择客户端'ABC'并且它返回正确的TreeViewItem时,我再次打开它.有没有人以前遇到过这个或知道我能看到什么来帮助解决这个问题?
我在TreeView的Loaded事件中运行上面的代码.
我弄清楚这里发生了什么,线索在MSDN文档中的返回值为ItemContainerGenerator.ContainerFromItem():
与给定项目对应的UIElement.如果项不属于项集合,或者尚未为其生成UIElement,则返回null.
看起来当返回null时,尚未为该项创建UIElement.
我用它来绕过这个
tvClientContract.UpdateLayout();
更新布局并确保在调用之前存在UIElement
ItemContainerGenerator.ContainerFromItem()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |