Я использую среду MVVM Light для создания приложения SL4.Мое простое приложение состоит в основном из одного основного представления (shellView), которое разделено на несколько пользовательских элементов управления.Это просто удобное разделение пользовательского интерфейса, поэтому у них нет собственной ViewModel.
ShellView содержит Keypad (пользовательский пользовательский контроль), который содержит несколько кнопок Keypad (пользовательский пользовательский контроль).
Я совершенно уверен (потому что я проверил), что DataContext настроен правильно и используется всеми пользовательскими элементами управления в иерархии.(Datacontext ShellView - это ShellViewModel, DataContext клавиатуры - ShellViewModel и т. Д.).
В ShellViewModel у меня есть ICommand (RelayCommand) с именем «ProcessKey».
В элементе управления клавиатуры у меня есть что-то вроде:
<controls:KeypadButton x:Name="testBtn" Text="Hello">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding PressStandardKeyCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</controls:KeypadButton>
Клавиатура KeypadButton - это, по сути, Grid, который содержит кнопку.Событие MouseLeftButtonUp перехватывается, и запускается пользовательское событие «Click».Позвольте мне показать вам некоторый код, чтобы легко объяснить, что я делаю:
public partial class KeypadButton : UserControl
{
public delegate void KeypadButtonClickHandler(object sender, RoutedEventArgs e);
public event KeypadButtonClickHandler Click;
public KeypadButton()
{
// Required to initialize variables
InitializeComponent();
}
private void innerButton_Click(object sender, MouseButtonEventArgs e)
{
if (Click != null)
Click(sender, new KeypadButtonEventArgs());
}
}
public class KeypadButtonEventArgs : RoutedEventArgs
{
public string test { get; set; }
}
Теперь, если я установлю точку останова для тела innerButton_Click, я могу видеть, что Click правильно перехвачен и содержит точки наRelayCommand.Однако ничего не происходит: «Click (отправитель, новый KeypadButtonEventArgs ());»выполняется, но не более того.
Почему это так?Не должны ли выполнить целевую функцию, определенную в RelayCommand?Может быть, проблема связана с областью?
Заранее спасибо, Ура, Джанлука.