我有一个gridview,它可以触发一个项目的持有事件。这些项目包含stackpanel
,textblock
和image
,我目前使用以下代码处理
private async void gvJobs_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e)
{
JobLocal job = null;
if(e.OriginalSource is TextBlock)
{
job = (JobLocal)((TextBlock)e.OriginalSource).DataContext;
}
else if (e.OriginalSource is Image)
{
job = (JobLocal)((Image)e.OriginalSource).DataContext;
}
else if (e.OriginalSource is StackPanel)
{
job = (JobLocal)((StackPanel)e.OriginalSource).DataContext;
}
....code based on above result
}
但我觉得有一种比使用多个if语句更好的方法。我尝试使用var
但我无法访问DataContext
有人可以建议一个更好的方法来实现我的目标
答案 0 :(得分:2)
您的UI元素源自FrameworkElement
,因此您可以投射到此。
if (e.OriginalSource is FrameworkElement) {
job = (JobLocal)((FrameworkElement) e.OriginalSource).DataContext;
}
答案 1 :(得分:1)
使用c#6.0 null-conditional成员访问运算符并使其成为单行
这看起来很好var job = (e.OriginalSource as FrameworkElement)?.DataContext as JobLocal;
if(job != null) ...