gpt4 book ai didi

c# - 从ViewModel调用 View 上的事件或方法

转载 作者:行者123 更新时间:2023-12-03 10:45:15 26 4
gpt4 key购买 nike

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

如您所见,Button同时具有Click事件和ViewModel响应的命令。我的问题是,当我在ViewModel上时,如何简单地调用“TransitionNext()”?

我一直在与Interactions/Triggers一起玩耍,但它似乎更适用于其他方式……我有点卡住了。下面的代码让我在调用“TranisitionNext”时回调到ViewModel,但反之则不行。
            <interact:Interaction.Triggers>
<interact:EventTrigger EventName="TransitionNext">
<ei:CallMethodAction MethodName="ViewModelMethod"></ei:CallMethodAction>
</interact:EventTrigger>
</interact:Interaction.Triggers>

这样就可以了-我只想能够从ViewModel中调用TransitionNext,而不必在View中进行。有人可以帮忙吗?

最佳答案

由于MainSlideshow对象是 View 对象,因此无法直接从viewmodel调用其方法。请记住,在MVVM模式中, View 模型不得直接引用其 View 。因此,您必须从 View 中调用Slideshow.TransitionNext()方法。

您可以执行此操作,例如,使用Expression Blend Samples中的DataEventTrigger

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

在这种情况下, TransitionNextAction是您的自定义操作:
class TransitionNextAction: TriggerAction<Slideshow>
{
protected override void Invoke(object o)
{
this.AssociatedObject.TransitionNext();
}
}

关于c# - 从ViewModel调用 View 上的事件或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28722766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com