我正在使用MVVM-Light EventToCommand尝试从我的ViewModel实现预取机制,使用发布在MVVM Light codeplex站点上的EventToCommand的示例代码。
不幸的是,命令似乎没有触发,即使我用作模型的MouseMove事件确实触发了。
我是否遗漏了一些关于DataGrid LoaddingRow事件的内容,这意味着它永远不会起作用?
这是我的XAML(人工添加MouseMove事件以证明基础知识):
<sdk:DataGrid x:Name="TaskDataGrid"
AutoGenerateColumns="True" CanUserReorderColumns="False"
CanUserResizeColumns="False" ItemsSource="{Binding UserTasks}">
<!-- LoadingRow="TaskDataGrid_LoadingRow"> -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="LoadingRow">
<cmd:EventToCommand PassEventArgsToCommand="True"
Command="{Binding CheckForPrefetchCommand}" />
</i:EventTrigger>
<i:EventTrigger EventName="MouseMove">
<cmd:EventToCommand PassEventArgsToCommand="True"
Command="{Binding MoveMouseCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
等
以下是我的ViewModel中的代码:
public RelayCommand<MouseEventArgs> MoveMouseCommand
{
get;
private set;
}
public RelayCommand<DataGridRowEventArgs> CheckForPrefetchCommand
{
get;
private set;
}
并且在ViewModel的构造函数中,以下称为
CheckForPrefetchCommand = new RelayCommand<DataGridRowEventArgs>(e =>
{
// Do stuff here
int rowCount = e.Row.GetIndex();
});
MoveMouseCommand = new RelayCommand<MouseEventArgs>(e =>
{
var element = e.OriginalSource as UIElement;
var point = e.GetPosition(element);
string temp = string.Format("Position: {0}x{1}", point.X, point.Y);
});
鼠标移动的代码被命中,而LoadingRow的代码则没有。我错过了什么?
答案 0 :(得分:1)
这不是我第一次听到有关某些DataGrid事件的投诉。我没有时间研究它,但我认为这种控制有问题。我将与MSFT核实并回复您。
干杯, 劳伦
答案 1 :(得分:1)
我有WPF这个问题。 经过多次尝试,我找到了一个解决方案,但对我来说仍然不合逻辑。 解决方案是为同一事件LoadingRow调用Event触发器两次。 它适用于一些需要调整的东西。 我不知道我的命题是否可以帮助LBugnion先生解决问题,我会以任何方式与你分享。
<i:Interaction.Triggers>
<i:EventTrigger EventName="LoadingRow">
<cmd:EventToCommand PassEventArgsToCommand="True"
Command="{Binding CheckForPrefetchCommand}" />
</i:EventTrigger>
<i:EventTrigger EventName="LoadingRow">
<cmd:EventToCommand PassEventArgsToCommand="True"
Command="{Binding CheckForPrefetchCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>