C# 从ViewModel对视图调用事件或方法

C# 从ViewModel对视图调用事件或方法,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在尝试使用Transitionals库创建幻灯片放映,但使用TransitionNext方法时遇到问题。这是我的SelectorControl.xaml上的内容 <Grid DockPanel.Dock="Top" Height="400" Width="600"> <controls:Slideshow x:Name="MainSlideshow"> <controls:SlideshowItem Backgro

我正在尝试使用Transitionals库创建幻灯片放映,但使用TransitionNext方法时遇到问题。这是我的SelectorControl.xaml上的内容

    <Grid DockPanel.Dock="Top" Height="400" Width="600">

      <controls:Slideshow x:Name="MainSlideshow">

            <controls:SlideshowItem Background="Blue">
                <jamesTest:PlayerDisplay DataContext="{Binding CurrentPlayer}" />
            </controls:SlideshowItem>

            <controls:SlideshowItem >
                <jamesTest:PlayerDisplay DataContext="{Binding SelectedPlayer}" />
            </controls:SlideshowItem>

    </Grid>

    <Button DockPanel.Dock="Bottom" Name="StartStopButton" Content="Stop!" Background="Black" Click="ButtonBase_OnClick"                         
           Command="{Binding StartButtonCommand}"
           Visibility="{Binding BeginSlideShow, Converter={StaticResource visibilityConverter}}"/>


    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        MainSlideshow.TransitionNext();
    }
如您所见,该按钮既有单击事件,也有ViewModel响应的命令。我的问题是,当我在ViewModel上时,如何简单地调用TransitionNext

我一直在玩弄交互/触发器,但它似乎更倾向于另一种方式。。。我有点困了。下面的代码允许我在调用TransisitionNext时回调ViewModel,但反过来不行

            <interact:Interaction.Triggers>
                <interact:EventTrigger EventName="TransitionNext">
                    <ei:CallMethodAction MethodName="ViewModelMethod"></ei:CallMethodAction>
                </interact:EventTrigger>
            </interact:Interaction.Triggers>
所以这一切都是可行的——我只希望能够从ViewModel调用TransitionNext,而不必在视图中执行。有人能帮忙吗?

因为主幻灯片对象是视图对象,所以不能直接从viewmodel调用其方法。请记住,在MVVM模式中,viewmodel不能直接引用其视图。因此,必须从视图中调用Slideshow.TransitionNext方法

例如,可以使用“来自混合采样”的表达式来执行此操作

<controls:Slideshow x:Name="MainSlideshow">
    <i:Interaction.Triggers>
        <samples:DataEventTrigger EventName="ViewModelEvent">
            <local:TransitionNextAction/>
        </samples:DataEventTrigger>
    </i:Interaction.Triggers>
</controls:Slideshow>

我从来没有面对这个问题,因为我的命令通常在我的ViewModel内部调用一个方法,可能会考虑这一溃败?事情是,我需要调用一个方法,我正在与Slideshow.TransitionNext一起工作,我不知道如何在VIEW模型中做到这一点。所以Slideshow.TransitionNext基本上是一个视图相关的方法?
class TransitionNextAction: TriggerAction<Slideshow>
{
    protected override void Invoke(object o)
    {
        this.AssociatedObject.TransitionNext();
    }
}