直到今天,我一直在使用 MVVM Light 的 EventToCommand 在 XAML 中进行事件处理。我决定为鼠标事件尝试 InputBinding,但到目前为止,结果远非令人满意。我猜我做错了什么,因为鼠标点击之间可能有半秒的延迟。使用 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 设置,它没有问题。此外,假设我确实犯了一个愚蠢的错误并且这不是预期的行为,对于键和鼠标事件,InputBinding 是否比 EventToCommand 有任何优势,反之亦然?两者在功能和性能方面有何不同(如果在这种情况下这甚至是一个问题)?
编辑 - 我注意到 InputBinding 和 EventToCommand (我设置的几乎相同)的其他一点是,每次单击圆圈时,任务管理器都会显示程序的内存使用量会上升一点。这是正常的吗?