SL4アプリケーションを構築するためにMVVMLightフレームワークを使用しています。私のシンプルなアプリは、主に単一のメインビュー(shellView)で構成されており、複数のUserControlに分割されています。これらはUIの便利な分離であるため、独自のViewModelはありません。
ShellViewには、複数のキーパッドボタン(カスタムユーザーコントロール)を含むキーパッド(カスタムユーザーコントロール)が含まれています。
DataContextが適切に設定され、階層内のすべてのユーザーコントロールによって使用されていることを(確認したため)確信しています。(ShellViewのDatacontextはShellViewModel、キーパッドのDataContextはShellViewModelなどです)。
ShellViewModelには、「ProcessKey」という名前のICommand(RelayCommand)があります。
キーパッドコントロールには、次のようなものがあります。
<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は、基本的にボタンを含むグリッドです。MouseLeftButtonUpイベントがキャッチされ、カスタムの「クリック」イベントが発生します。私がしていることを簡単に説明するためのコードをいくつか紹介しましょう。
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(sender、new KeypadButtonEventArgs());" 実行されますが、それ以上はありません。
なぜこれがそう振る舞うのですか?RelayCommandで定義されているターゲット関数を実行するべきではありませんか?多分スコープ関連の問題ですか?
よろしくお願いします、乾杯、ジャンルカ。