Windows 8.1处理不同的数据类型

本文关键字:数据类型 处理 Windows | 更新日期: 2023-09-27 18:04:09

我有一个gridview,可以在一个项目上触发一个持有事件。项目包括stackpanel, textblockimage,我目前正在处理以下代码

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有没有人能告诉我一个更好的方法来实现我的目标?

Windows 8.1处理不同的数据类型

你的UI元素是从FrameworkElement派生出来的,所以你可以转换成这个

if (e.OriginalSource is FrameworkElement) {
    job = (JobLocal)((FrameworkElement) e.OriginalSource).DataContext;
}

这看起来是使用c# 6.0的空条件成员访问操作符并使其成为一行

的好情况。
var job = (e.OriginalSource as FrameworkElement)?.DataContext as JobLocal;
if(job != null) ...