目前我正在使用多个对象,以便从需要多次演员的事件中获取属性。
如果有更好的,可能更短的方法,我很担心。
System.Windows.RoutedEventArgs eventTrack = (System.Windows.RoutedEventArgs)e;
FluidKit.Controls.ElementFlow fluidItem = (FluidKit.Controls.ElementFlow)eventTrack.OriginalSource;
Client.DataModel.Advertisement adv = (Client.DataModel.Advertisement)fluidItem.ClickedItem;
string test = adv.ShopId.ToString();
答案 0 :(得分:5)
嗯,你无法做很多事 - 你可以试试像
这样的结构Advertisement adv = ((e as RoutedEventArgs).OriginalSource as ElementFlow).ClickedItem as Advertisement;
但这很难看。在.NET 4中还有dynamic
关键字可用的方法:
dynamic eventArgs = e;
dynamic adv = e.OriginalSource.ClickedItem;
但这有影响性能的缺点。
我认为你拥有它的方式(可能没有那些命名空间)是最好的代码可读性,同时保持低性能影响。
答案 1 :(得分:5)
您可以在同一行使用多次投射:
string adv = ((Client.DataModel.Advertisement)(((FluidKit.Controls.ElementFlow)(((System.Windows.RoutedEventArgs)e).OriginalSource)).ClickedItem)).ShopId.ToString();
或者您可以使用dynamic
关键字作为Migol提到的