2011-12-20 36 views
1

這裏是的ObservableCollection,它在我的樹視圖「的ItemSource」:SelectedItemChanged事件綁定到一個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我HA VE獲得存取權限項目2(我記錄的對象) 是來到我的腦海順理成章的事情是要改寫我的功能有:

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; 

不編譯... :(

回答

1

爲什麼不把e.NewValue投射到你的元組?

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

使用as運營商可以確保如果轉換失敗的元組將是空的!

+0

我曾嘗試施放「e」... :( – 2011-12-20 13:17:57

+0

這工程順便說一句,好! – 2011-12-20 13:18:07

0

只投e.NewValue正確類型:

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

當然這會產生一個例外,演員使用不當,但這完全是另一個問題。您可以按原樣使用它,因爲它可以在此特定場景中使用,或者如果您打算爲其他項類型使用此處理程序,也可以將其抽象化。

相關問題