首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF鼠标双击事件如何工作?

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

Stack Overflow用户
提问于 2018-03-22 07:31:04
回答 1查看 507关注 0票数 0

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

代码语言:javascript
复制
async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
     var dg = (DataGrid)o;
     var item = (MyCustomType)dg.SelectedItem;
     await MyAsyncMethod(item.Id);
}

和在线

代码语言:javascript
复制
var dg = (DataGrid)o;

发生NullReferenceException。Morover,我无法在调试会话中显示值。当我将方法更改为:

代码语言:javascript
复制
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);
    }
}

每件事似乎都是正确的。异步鼠标双击如何工作,使我无法调用事件,如第一表示?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 10:39:12

第一个代码段和第二个代码片段的主要区别是,第一个代码段不检查实际是否有可用的SelectedItem。

像这样使用as操作符,您应该会很好:

代码语言:javascript
复制
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无关。

编辑:

如果MyCustomType是struct,则不能使用as运算符,但仍应检查SelectedItem属性是否实际设置:

代码语言:javascript
复制
async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
    var dg = (DataGrid)o;
    if (dg.SelectedItem != null)
    {
        await MyAsyncMethod(((MyCustomType)dg.SelectedItem)item.Id);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49422924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档