MVVM с анимацией (я должен использовать VisualStateManager?) - PullRequest
0 голосов
/ 28 мая 2010

У меня есть View.xaml со следующим набором в разделе ресурсов:

<DataTemplate DataType="{x:Type ViewModels:MyFirstViewModel}">
    <Views:MyFirstView Content="{Binding}" />
</DataTemplate>

<DataTemplate DataType="{x:Type ViewModels:MySecondViewModel}">
    <Views:MySecondView Content="{Binding}"/>
</DataTemplate>

В содержании View.xaml у меня есть:

<!-- SelectedMyViewModel is either set to MyFirstViewModel or MySecondViewModel -->
<ContentControl Content="{Binding SelectedMyViewModel}" />

Когда SelectedMyViewModel изменяется, я хотел бы иметь анимацию, чтобы текущий вид исчезал, а новый вид исчезал ...

Каким-то образом я чувствую, что это возможно с помощью VisualStateManager - но я не могу понять, как!

Это проект WPF 4.0 ...

1 Ответ

0 голосов
/ 29 мая 2010

Возможно, вы сможете ответить на этот вопрос, чтобы помочь вам WPF Fade Animation .

Они делают FadeIn / FadeOut по видимости. Возможно, можно изменить триггер с ...

<Trigger Property="Visibility" Value="Visible">

к ...

<Trigger Property="Content" Value="{x:Null}">

Так что моя идея заключается в том, что при переходе между ViewModels вы будете делать что-то вроде

public void SwapViewModels()
{
    // SelectedMyViewModel contains a MyFirstViewModel
    // Setting to null fires the Animation to fadeout
    SelectedMyViewModel = null;

    // Setting the Value to anything but null, should fire the fadein animation
    SelectedMyViewModel = new MySecondViewModel();
}

Я не тестировал код, но, надеюсь, он даст вам отправную точку.

...