Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf MVVM应用程序中来自用户控件的路由事件_Wpf_C# 4.0_Wpf Controls - Fatal编程技术网

Wpf MVVM应用程序中来自用户控件的路由事件

Wpf MVVM应用程序中来自用户控件的路由事件,wpf,c#-4.0,wpf-controls,Wpf,C# 4.0,Wpf Controls,我一直坚持将用户控件集成到mvvm应用程序中 用户控件是一个自定义日历,没有使用MVVM原则编写(我不想在MVVM中重新编写) 我在用户控件中触发了一个鼠标按下事件(这是三个不同用户控件的组合) 触发事件的代码如下所示: public static readonly RoutedEvent DateEvent = EventManager.RegisterRoutedEvent("dateEvent", RoutingStrategy.Bubble, typeof(Route

我一直坚持将用户控件集成到mvvm应用程序中

用户控件是一个自定义日历,没有使用MVVM原则编写(我不想在MVVM中重新编写)

我在用户控件中触发了一个鼠标按下事件(这是三个不同用户控件的组合)

触发事件的代码如下所示:

public static readonly RoutedEvent DateEvent = 
    EventManager.RegisterRoutedEvent("dateEvent", RoutingStrategy.Bubble, 
    typeof(RoutedEventHandler), typeof(UserControl2));

public event RoutedEventHandler dateEvent
{
    add{AddHandler(DateEvent, value);}
    remove{ RemoveHandler(DateEvent, value);}
}

private void UserControl_MouseUp(object sender, MouseButtonEventArgs e)
{
    RaiseEvent(new RoutedEventArgs(UserControl2.DateEvent, this));
}
如何在主应用程序viewModel中订阅此路由事件?我知道它不是很MVVM,但正如我所说的,我不能重新编写我的用户控件


我知道这个事件会在树上冒泡,直到它被标记为已处理。我知道要添加一个public void方法来处理该事件-我只是不确定首先如何实现对该事件的拦截。

我认为您应该阅读本节的RelayCommand部分


说清楚,我不建议您重新编写控件,而是建议您使用传入的命令绑定事件。好的,谢谢。听起来我需要调查一下。我现在已经解决了这个问题(以一种非常非MVVM的方式),所以现在就可以了-我真的应该用MVVM风格重新做用户控制!!我提出的解决方案导致视图和viewModel之间存在大量依赖关系