Сводный контроль MVVM-Light-EventToCommand SelectedIndex отправляет предыдущий индекс - PullRequest
1 голос
/ 10 января 2012

Я получаю индекс элемента Сводки, который я покидаю, а не Элемент Сводки, к которому я иду.
Я искал некоторое время и могу подумать о некоторых решениях, таких как использование события в представлении, а затем отправка сообщения с использованием MVVM-Light в ViewModel. Но я бы предпочел не делать этого, я бы предпочел придерживаться этой текущей реализации, конечно, немного по-другому.

Любая помощь приветствуется

Мой xaml:

    <controls:Pivot x:Name="ContentPivot" Margin="12,0,12,0">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <cmd:EventToCommand Command ="{Binding SelectSlideCommand}"
                                        CommandParameter="{Binding SelectedIndex, ElementName=ContentPivot}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>

        <controls:PivotItem x:Name="PivotItem0" Header="0">
            <Image Source="{Binding ViewingSlides[0].Path}"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </controls:PivotItem>

        <controls:PivotItem x:Name="PivotItem1" Header="1">
            <Image Source="{Binding ViewingSlides[1].Path}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </controls:PivotItem>

        <controls:PivotItem x:Name="PivotItem2" Header="2">
            <Image Source="{Binding ViewingSlides[2].Path}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </controls:PivotItem>
    </controls:Pivot>

и c #:

    public RelayCommand<int> SelectSlideCommand;

    SelectSlideCommand = new RelayCommand<int>((pivotItem) => SelectSlideAction(pivotItem));

    void SelectSlideAction(int parameter)
    {
        currentIndex = parameter;

        UpdateViewingSlides();
        Debug.WriteLine("SelectSlideAction: " + parameter);
    }

1 Ответ

2 голосов
/ 11 января 2012

Есть ли у вас свойство SelectedItem в вашем элементе управления ... вы можете подключить его в Your ViewModel к свойству в режиме привязки TwoWay, чтобы всегда получать обновленное значение (тогда вам не понадобится эта команда) ....Также вы можете попробовать

        <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <cmd:EventToCommand Command ="{Binding SelectSlideCommand}"
                                    CommandParameter="{Binding SelectedItem, ElementName=ContentPivot}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
...