Windows 8.1处理可能不同的数据类型

时间:2015-07-23 11:40:03

标签: c# windows-8.1

我有一个gridview,它可以触发一个项目的持有事件。这些项目包含stackpaneltextblockimage,我目前使用以下代码处理

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 有人可以建议一个更好的方法来实现我的目标

2 个答案:

答案 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) ...