使用MVVM-Light EventToCommand的Silverlight 4 DataGrid LoadingRow事件没有触发?

时间:2010-06-23 10:24:16

标签: datagrid silverlight-4.0 mvvm-light

我正在使用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的代码则没有。我错过了什么?

2 个答案:

答案 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>