MVVM Light를 사용하는 WPF 프로젝트가 있습니다. 프로젝트 페이지의 ConnectionPage
에 Connected
이벤트를 발생시킬 수있는 UserControl (ctlSqlConnection
)이 있습니다. MVC Light을 사용하여 EventToCommand
과 함께이 이벤트를 가로 채고 ConnectionPage
의 viewmodel (UserControl 자신의 ViewModel 아님)에서 NavigateToDatabasePageCommand
이라는 명령을 실행하지만 작동하지 않는 것 같습니다. 즉, 아무 일도 일어나지 않고 있습니다.MVVM Light에서 UserControl 이벤트가 인터셉트되지 않는 문제 EventToCommand
ConnectionPage
의 DataContext
은 페이지 UI가 올바르게 채워지기 때문에 잘 설정되어 있습니다.
나는 전통적인 .NET 처리기를 유선으로 연결 했으므로 이벤트가 발생하고 있음을 알고 있습니다.
MVVM Light 버전 5.3을 사용하고 있습니다.
감사합니다. 저는 MVVM과 툴킷을 처음 접했으므로 어리석은 짓을하기를 기대합니다.
업데이트 : 난 이후
public event EventHandler<ConnectionSettingViewModel> Connected;
로 선언 해당 UserControl에서 이벤트 자체 검토 한하지만 내가 좋아하는 대신 다른 비 일반적인 이벤트 핸들러를 넣을 때
public event EventHandler ConnectedWithNoArgs;
이 있습니다 그것은 작동!?
그래서,
- 는 그 상호 작용의 부분은 일반적인 이벤트 선언을 처리 할 수없는 의미 하는가, 아니면 바로 뭔가를하고 있지 않다?
다음<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
입니다 : - 가 어떻게이 탐색() 메소드 여기
에 이벤트에서있는 EventArgs를 전달하는 얻을 것입니다 것은 ConnectionPage
에 대한 XAML입니다
public class ConnectionPageViewModel : ViewModelBase
{
SqlServerConnectionControlViewModel _serverCtrlVM;
Avalon _avalon;
IFrameNavigationService _navService;
public ConnectionPageViewModel(IFrameNavigationService navigationService, Avalon avalon)
{
_avalon = avalon;
_navService = navigationService;
_serverCtrlVM = new SqlServerConnectionControlViewModel(avalon.ConnectionStringManager);
NavigateToDatabasePageCommand = new RelayCommand(Nav);
}
private void Nav()
{
// NOT GETTING HERE!!!
_navService.NavigateTo("DatabasePage");
}
public SqlServerConnectionControlViewModel SqlServerConnectionControlViewModel
{
get { return _serverCtrlVM; }
}
public RelayCommand NavigateToDatabasePageCommand { get; private set; }
}