2013-08-02 45 views
1

我有一个DataGrid和一个DataPager绑定到一个DomainDataSource。这部分工作正常。问题是,我有一个函数来处理一个DataGridRow为什么我的DataPager导致多个MouseButtonUp事件被抛出?

private void dataGrid_list_LoadingRow(object sender, DataGridRowEventArgs e) 
    { 
     e.Row.AddHandler(Control.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Row_MouseLeftButtonDown), true); 
    } 

Row_MouseLeftButtonDown的实际逻辑并不重要双击。它工作正常,除非我点击了使用DataPager的另一个页面。现在我显示我有两个鼠标点击同时触发(当它不应该触发我的双击时触发)。如果我点击四页,当我点击一行时,我注册了五次点击(一次用于点击行,我猜每次点击一次以用DataPager改变页面)

任何想法为什么会发生这种情况以及我如何解决它?我试着在网页上随意放置一个不做任何事的按钮,然后点击它不会导致这个问题,所以它似乎不是任何点击。

回答

1

事件正在被注册每次dataGrid_list_LoadingRow被调用,只要你点击到另一页面,就必须发生这种情况。

private void dataGrid_list_LoadingRow(object sender, DataGridRowEventArgs e) 
{ 
    e.Row.RemoveHandler(Control.MouseLeftButtonDownEvent, Row_MouseLeftButtonDown); 
    e.Row.AddHandler(Control.MouseLeftButtonDownEvent, Row_MouseLeftButtonDown, true); 
} 

在第一次遇到这种被击中,RemoveHandler不会造成任何问题,因为我们根本没有任何效果,根据the documentation。但是第二次打这个函数时,它会删除最初注册的处理程序,并简单地重新添加它。这样,你不会继续建立注册处理程序的列表。

另外,new MouseButtonEventHandler(Row_MouseLeftButtonDown)没有必要,您可以使用Row_MouseLeftButtonDown(请参阅Add/Remove handler to textbox)。

+0

啊哈!就是这样!我从来不会想到这个处理程序被反复添加。我被这个难住了,谢谢! – cost

相关问题