Событие LoadingRow Silverlight 4 DataGrid с использованием MVVM-Light EventToCommand не запускается? - PullRequest
0 голосов
/ 23 июня 2010

Я использую MVTM-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 - нет. Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 27 марта 2012

У меня есть эта проблема с WPF. После многих попыток я нашел решение, но оно все еще не логично для меня. решение состоит в том, чтобы вызвать триггер события два раза для одного и того же события LoadingRow. это работает для меня с некоторыми вещами, чтобы настроить. Я не знаю, может ли мое предложение помочь мистеру Л.Буньону решить проблему. В любом случае, я поделюсь им с вами.

<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>
1 голос
/ 23 июня 2010

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

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

...