这是我的TreeView的"ItemSource“的ObservableCOllection:
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 (string)和Item2 (object)值呢?
编辑:我得到了这个测试,这可能是解决问题的一种方法
if (e.NewValue.GetType() == typeof(Tuple<string, object>))但我不知道下一步该怎么做,原因如下:
object MyObject = = e.NewValue.Item2;不能编译...:(
发布于 2011-12-20 21:02:02
为什么不将e.NewValue类型转换为元组呢?
private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
Tuple<string, object> tuple = e.NewValue as Tuple<string, object>;
}使用as操作符可以确保如果强制转换失败,您的元组将为空!
发布于 2011-12-20 20:58:36
只需将e.NewValue转换为正确的类型:
private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var tuple = (Tuple<string, object>)e.NewValue;
var item2 = tuple.Item2;
}当然,这会产生一个错误使用强制转换的异常,但这完全是另一个问题。您可以按原样使用它,因为它将在此特定场景中工作,或者,如果您打算将此处理程序也用于其他项类型,则可以将其抽象。
https://stackoverflow.com/questions/8575773
复制相似问题