1

这是我的 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>'

那么,我可以做些什么来访问我的 Tuple 的 Item1 (字符串)和 Item2 (对象)值?

编辑:我得到了这个测试,这可能是解决问题的一种方法

if (e.NewValue.GetType() == typeof(Tuple<string, object>))

但我不知道下一步该怎么做,原因如下:

object MyObject =  = e.NewValue.Item2;

不编译... :(

4

2 回答 2

1

为什么不将 e.NewValue 转换为您的元组?

private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    Tuple<string, object> tuple = e.NewValue as Tuple<string, object>;
}

使用as运算符可确保如果转换失败,您的元组将为空!

于 2011-12-20T13:02:02.043 回答
0

只需e.NewValue转换为正确的类型:

private void plugin_Selected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    var tuple = (Tuple<string, object>)e.NewValue;
    var item2 = tuple.Item2;
}

当然,这会产生一个异常使用不正确的演员表,但这完全是另一个问题。您可以按原样使用它,因为它将在此特定场景中工作,或者如果您打算将此处理程序也用于其他项目类型,则将其抽象。

于 2011-12-20T12:58:36.180 回答