我有一个窗口,随着时间的推移必须显示不同的控件。我使用mvvm模式搜索了一个解决方案,最后得到了这个
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding ViewType}" Value="RecipeList">
<Setter Property="ContentTemplate" Value="{StaticResource RecipeTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ViewType}" Value="Default">
<Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
到目前为止,这项工作正常,但我对两件事感到好奇:
答案 0 :(得分:1)
由于动画是特定于视图的操作,因此它们应该从视图后面的代码运行,而不是ViewModel。在过去,我已经连接到一个事件,并从代码隐藏中运行以下内容:
Storyboard animation = (Storyboard)panel.FindResource("MyAnimation");
animation.Begin();
对于问题#1,我发现您的代码没有任何问题,可以根据ViewModel中的属性显示不同的View。
答案 1 :(得分:1)
关于问题#2:
您可以在模板中的控件中使用EventTrigger来启动动画,如下所示:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard x:Name="SomeStoryBoard"/>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
</Window>