【发布时间】:2013-09-12 19:21:31
【问题描述】:
直到今天,我一直在使用 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 (我设置的几乎相同)的另一件事是,每次单击圆圈时,任务管理器都会显示程序的内存使用量增加了一点。这正常吗?
【问题讨论】:
标签: c# wpf xaml mvvm-light inputbinding