WPF鼠标双击事件如何工作?

时间:2018-03-22 07:31:05

标签: c# .net wpf mouseclick-event

我在代码后面的wpf数据网格上有鼠标双击事件,如下所示:

async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
     var dg = (DataGrid)o;
     var item = (MyCustomType)dg.SelectedItem;
     await MyAsyncMethod(item.Id);
}

并在线

var dg = (DataGrid)o;

发生NullReferenceException。 Morover,我无法在调试会话期间显示价值。 当我将我的方法改为:

async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
    if(o is DataGrid && (o as DataGrid).SelectedItem !=null)
    {
         await MyAsyncMethod(((MyCustomType)(o as DataGrid).SelectedItem).Id);
    }
}

每一件事似乎都能正常运作。异步鼠标双击如何工作,我不能像第一次表示一样调用事件?

1 个答案:

答案 0 :(得分:2)

第一个和第二个代码段之间的主要区别在于第一个代码片段不会检查是否确实存在SelectedItem

像这样使用as运算符,您应该没问题:

async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
    var dg = (DataGrid)o;
    var item = dg.SelectedItem as MyCustomType;
    if (item != null)
        await MyAsyncMethod(item.Id);
}

您的问题与事件本身无关,也与async / await无关。

修改

如果MyCustomTypestruct,您无法使用as运算符,但仍应检查SelectedItem属性是否实际设置:

async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
    var dg = (DataGrid)o;
    if (dg.SelectedItem != null)
    {
        await MyAsyncMethod(((MyCustomType)dg.SelectedItem)item.Id);
    }
}