今日まで、私は XAML でのイベント処理に MVVM Light の EventToCommand を使用してきました。マウス イベントの InputBinding を試してみることにしましたが、これまでのところ、満足のいく結果にはほど遠いものでした。マウス クリックの間におそらく 0.5 秒の遅延があるため、何か間違ったことをしていると思います。EventToCommand を使用すると、UI はクリックするだけですばやく更新されます。現時点でこのテスト プログラムが行っていることは、クリックされたときにキャンバス上の円を白または黒で塗りつぶすことだけです。
<Canvas>
<Ellipse Canvas.Left="{Binding X}"
Canvas.Top="{Binding Y}"
Width="16"
Height="16"
Fill="Black">
<Ellipse.InputBindings>
<MouseBinding Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.ClickEllipse}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Ellipse}}}"
MouseAction="LeftClick" />
</Ellipse.InputBindings>
public RelayCommand<object> ClickEllipse { get; set; }
ClickEllipse = new RelayCommand<object>((o) => ExecuteClickEllipse(o));
private void ExecuteClickEllipse(object o)
{
var obj = o as Ellipse;
if (obj.Fill == Brushes.Black)
{
obj.Fill = Brushes.White;
TestText = "White";
}
else
{
obj.Fill = Brushes.Black;
TestText = "Black";
}
}
クリック間の遅延を引き起こすために、ここで何か間違ったことをしていますか? これが意図した動作になるとは想像できません。EventToCommand をほぼ同じようにセットアップしましたが、問題はありません。さらに、私がばかげた間違いを犯し、これが意図した動作ではないと仮定すると、Key および Mouse イベントの EventToCommand よりも InputBinding の利点はありますか、またはその逆ですか? 機能とパフォーマンスの点で 2 つはどのように異なりますか (この状況でそれが問題になる場合)?
編集 - InputBinding と EventToCommand (ほぼ同じように設定しました) の両方で気付いたもう 1 つのことは、円をクリックするたびに、タスク マネージャーがプログラムのメモリ使用量を少しずつ増やしていることです。これは正常ですか?