我有一个方法,它根据在 TreeView 中单击的项目接收事件。
我可以以完全相同的方式将项目添加到 TreeView 和 TreeViewItem,因此尝试item
根据类型分配为 TreeView 或 TreeViewItem state.sender
。但是,目前我可以使它工作的唯一方法是首先将项目分配为对象。
private void ProcessEvent(Events.GetEventsResp resp, CustomAsyncStateContainer state)
{
object item = new object(); //must be a better way than this?
if (state.sender is TreeViewItem)
item = (TreeViewItem)state.sender;
else if (state.sender is TreeView)
item = (TreeView)state.sender;
//other code
}
我认为这称为拆箱?有没有更好的方法来做我正在尝试的事情?
编辑:下面是剩余的代码。问这个问题时我还没有写完,现在我意识到这object item = new object();
在这种情况下是行不通的。
private void DisplayGetEvent(Events.GetEventsResp resp, CustomAsyncStateContainer state)
{
object node = new object();
if (state.sender is TreeViewItem)
node = (TreeViewItem)state.sender;
else if (state.sender is TreeView)
node = (TreeView)state.sender;
if (resp.eventItems != null)
{
Events.UXEvent[] eventItems = resp.eventItems;
Array.Sort(eventItems, new UXWrapper.UXEventComparer());
int itemCount = eventItems.Length;
TreeViewItem tvItem = new TreeViewItem;
for (int i = 0; i < itemCount; i++)
{
tvItem.Header = eventItems[i].name;
tvItem.Tag = eventItems[i];
node.Items.Add(tvItem);
}
}
}