我正在开始WPF(这是重要的注意事项)。
我想用一个集合填充树视图,如果集合包含特定项目,我将子节点添加到它(静态):
private void FillControlTree()
{
var oClsModule = new ClsModules();
var allModules = oClsModule.GetData().Where(x => x.IsActive == true && x.ModuleCode != 1);
trvItemGroup.ItemsSource = allModules.ToList();
foreach (var item in trvItemGroup.Items)
{
if (((TbModules)item).ModuleEName.Trim() == "Account")
{
((TreeViewItem)item).Items.Add("Sub Account");
}
}
}
在投射到TreeViewItem
时抛出投射错误:
类型' System.InvalidCastException'的例外情况发生在 XERP.exe但未在用户代码中处理
附加信息:无法投射类型的对象 ' System.Data.Entity.DynamicProxies.TbModules_9677CFC546FFEF17BF70AEE61B6C8974A095496441FF7FE64C69C77F6B0FE288' 键入' System.Windows.Controls.TreeViewItem'。
答案 0 :(得分:1)
TreeView中的Items属性包含TbModules对象的集合。因此,您无法将此对象强制转换为TreeViewItem。试试这个:
foreach (TbModules item in trvItemGroup.Items)
{
if (item.ModuleEName.Trim() == "Account")
{
TreeViewItem treeViewItem = (TreeViewItem)trvItemGroup.ItemContainerGenerator.ContainerFromItem(item);
treeViewItem.Items.Add("Sub Account");
}
}
编辑:如果在窗口构造函数中调用它,ContainerFromItem方法将返回null,因为窗口尚未加载。请尝试以下方法:
public MainWindow()
{
InitializeComponent();
Loaded += MainWindowOnLoaded;
}
private void MainWindowOnLoaded(object sender, RoutedEventArgs e)
{
Loaded -= MainWindowOnLoaded;
FillControlTree();
}