我正在使用WPF c#应用程序。我有一个包含数据网格的用户控件。 我试图通过鼠标右键从用户控件发送公共事件。 这是创建的公共事件
public event MouseButtonEventHandler datagridMouseClick;
接下来它应该在datagrid的这个事件处理程序上被触发:
private void dataGrid1_MouseDown(object sender, MouseButtonEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) &&
!(dep is DataGridCell) &&
!(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep is DataGridCell)
{
cell = dep as DataGridCell;
while ((dep != null) && !(dep is DataGridRow))
{
dep = VisualTreeHelper.GetParent(dep);
}
row = dep as DataGridRow;
}
this.datagridMouseClick(sender, e); // GIVING ERROR
}
它给了我一个NullReferenceException。你可以帮我找出原因吗?在此先感谢,任何帮助表示赞赏 问候
事件在另一个类中处理(另一个项目实际上因为上面是一个dll除外).. 所以它在这里初始化其他类时听了。
public Window1()
{
InitializeComponent();
search.datagridDoubleClick +=new RoutedEventHandler(search_datagridDoubleClick);
search.datagridMouseClick += new MouseButtonEventHandler(search_datagridMouseClick); /* Only this one gives error , even if the other one is handled exactly the same way in the code o.O */
}
其中search是包含上述第一个代码的对象的名称
我认为这里的问题是我正在尝试侦听从另一个类/项目触发的事件(因为第一个代码来自.dll),这样当前类不会初始化侦听器并将其保持为null。虽然我已经在上面的search.datagridDoubleClick上使用了这个EXACT方法并且工作得很好(这很奇怪)。 PS。我不知道-1,听起来对我来说是个有价值的问题,反正......
答案 0 :(得分:4)
您需要检查某人是否通过检查datagridMouseClick
是否与Null不同来订阅您的活动。
if (datagridMouseClick != null)
this.datagridMouseClick(sender, e);