UserControl事件未被MVVM Light EventToCommand拦截的问题

时间:2017-01-31 14:33:56

标签: c# wpf mvvm mvvm-light eventtocommand

我有一个WPF项目,我正在使用MVVM Light。在项目的页面ConnectionPage上,我有一个可以引发ctlSqlConnection事件的UserControl(Connected)。我正在尝试使用MVVM Light来拦截此事件EventToCommand并在NavigateToDatabasePageCommand的viewmodel上执行名为ConnectionPage的命令(而不是UserControl自己的ViewModel) !),但这似乎不起作用。也就是说,什么也没发生。

正确填充页面的UI时,DataContext的{​​{1}}设置正常。

我知道事件正在被提出,因为我还连接了一个传统的.NET处理程序,而且这个正在受到攻击。

我正在使用MVVM Light的5.3版,以防它有任何影响吗?

我是MVVM和工具包的新手,所以我希望我能做些傻事。

更新

我在UserControl中查看了事件本身,该事件被声明为

ConnectionPage

但是当我把另一个非通用事件处理程序改为:

public event EventHandler<ConnectionSettingViewModel> Connected;

这使它有效!?

所以,

  1. 这是否意味着交互部分无法处理通用事件声明,或者我没有做正确的事情?
  2. 如何将EventArgs从事件传递到Nav()方法
  3. 以下是 public event EventHandler ConnectedWithNoArgs; 的XAML:

    ConnectionPage

    以下是<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" x:Class="Views.ConnectionPage" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:data="clr-namespace:Utilities.Data;assembly=Utilities" xmlns:util="clr-namespace:Utilities.Data;assembly=Utilities" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="ConnectionPage" DataContext="{Binding Source={StaticResource Locator}, Path=ConnectionPageViewModel}" x:Name="connPage" > <Grid x:Name="rootGrid"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <Label Grid.Row="0" Content="Create / Select Sql Server connection" Style="{StaticResource HeaderStyle}"/> <util:SqlServerConnectionControl Grid.Row="1" x:Name="ctlSqlConnection" DataContext="{Binding SqlServerConnectionControlViewModel}"> <i:Interaction.Triggers> <i:EventTrigger EventName="Connected"> <command:EventToCommand Command="{Binding ElementName=connPage, Path=DataContext.NavigateToDatabasePageCommand}" /> </i:EventTrigger> </i:Interaction.Triggers> </util:SqlServerConnectionControl> </Grid>

    ConnectionPageViewModel

1 个答案:

答案 0 :(得分:1)

好的,我想我已经弄清楚了,以防这对其他人有帮助。

Connected事件是 public event EventHandler<ConnectionSettingViewModelEventArgs> Connected;

我将PassEventArgsToCommand="True"添加到EventToCommand xaml。 我将RelayCommand更改为RelayCommand<T>,其中T:EventArgs(这是重要的位!)并使用ConnectionSettingViewModelEventArgs作为T.

相关问题