这是ObservableCOllection,它是我的TreeView的“ItemSource”:
ObservableCollection<Tuple<string, object>>
问题是我现在正在编写SelectedItemChanged
事件,我遇到了以下问题。据我所知,除了我的功能声明,我得不到任何其他东西:
private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
(我在xaml中获得了以下代码:
SelectedItemChanged="plugin_Selected"
)
当我做的事情是
e.NewValue.GetType()
当然我得到了Tuple<string, object>
但是在我的plugin_Selected中我有权访问Item2(我的元组的对象)
我想到的逻辑是用以下内容重写我的函数:
private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<Tuple<string, object>> e)
但我收到以下错误:
No overload for 'plugin_Selected' matches delegate 'System.Windows.RoutedPropertyChangedEventHandler<object>'
那么,我该怎么做才能访问我的元组的Item1(字符串)和Item2(对象)值?
编辑:我得到了这个可以解决问题的方法
if (e.NewValue.GetType() == typeof(Tuple<string, object>))
但我不知道下一步该做什么导致:
object MyObject = = e.NewValue.Item2;
无法编译...... :(
答案 0 :(得分:1)
为什么不将e.NewValue强制转换为你的元组?
private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
Tuple<string, object> tuple = e.NewValue as Tuple<string, object>;
}
使用as
运算符确保如果转换失败,您的元组将为null!
答案 1 :(得分:0)
只需将e.NewValue
转换为正确的类型:
private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var tuple = (Tuple<string, object>)e.NewValue;
var item2 = tuple.Item2;
}
当然这会产生一个异常使用的演员,但这完全是另一个问题。您可以按原样使用它,因为它可以在此特定方案中使用,或者如果您打算将此处理程序用于其他项类型,则可以将其抽象化。