WPF鼠标双击事件如何工作? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我在后面的代码中的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。而且,我无法在调试会话期间显示值。当我将我的方法更改为:

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);
    }
}

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

c# .net wpf mouseclick-event
1个回答
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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.