Событие Silverlight 4 DataGrid LoadingRow с использованием MVVM-Light EventToCommand не срабатывает?

Я использую MVVM-Light EventToCommand, чтобы попытаться реализовать механизм предварительной выборки из моей ViewModel, используя пример кода для EventToCommand, размещенный на сайте кодеплекса MVVM Light.

К сожалению, команда не срабатывает, хотя событие 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 — нет. Что мне не хватает?


person irascian    schedule 23.06.2010    source источник


Ответы (2)


Я не в первый раз слышу эту жалобу на некоторые события DataGrid. У меня не было времени вникать в это, но я думаю, что с этим управлением что-то не так. Я свяжусь с MSFT и свяжусь с вами.

Привет, Лоран

person LBugnion    schedule 23.06.2010
comment
Спасибо, Лоран. Как вы сказали, я подозреваю, что причиной проблемы является событие DataGrid, хотя событие срабатывает нормально и может без проблем использоваться в коде. - person irascian; 24.06.2010

У меня есть эта проблема с 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>
person user1288058    schedule 27.03.2012