0

我正在使用 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);
        });

MouseMove 的代码被命中,LoadingRow 的代码未被命中。我错过了什么?

4

2 回答 2

1

我对 WPF 有这个问题。经过多次尝试,我找到了解决方案,但对我来说仍然不合逻辑。解决方案是为同一个事件 LoadingRow 调用两次事件触发器。它对我有用,需要调整一些东西。我不知道我的提议是否可以帮助 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>
于 2012-03-27T10:20:41.120 回答
1

这不是我第一次听到关于某些 DataGrid 事件的抱怨。我没有时间研究它,但我认为该控件有问题。我将与 MSFT 核实并回复您。

干杯,劳伦特

于 2010-06-23T11:50:17.250 回答