Анимация динамического просмотра с использованием MVVM

Я пытался выяснить, как эффективно запускать анимацию в представлении, когда свойство в ViewModel обновляется, где анимация зависит от значения указанного свойства.

I Я воссоздал свою проблему в простом приложении с единственными View и ViewModel. Цель здесь - передать изменение цвета прямоугольника с помощью ColorAnimation. Для справки я использовал пакет MVVM Foundation Джоша Смита.

Пример проекта можно загрузить здесь.

Подводя итог, я хочу анимировать переход цвета в Просмотр при изменении свойства Color.

MainWindow.xaml


    
        
    
    
        
            
            
        

        
            
                
            
        

        
            
            
        
    

MainWindowViewModel.cs

namespace MVVM.ColorAnimation
{
    using System.Windows.Input;
    using System.Windows.Media;

    using MVVM;

    public class MainWindowViewModel : ObservableObject
    {
        private ICommand blueCommand;
        private ICommand greenCommand;

        public ICommand BlueCommand
        {
            get
            {
                return this.blueCommand ?? (this.blueCommand = new RelayCommand(this.TurnBlue));
            }
        }

        private void TurnBlue()
        {
            this.Color = Colors.Blue;
        }

        public ICommand GreenCommand
        {
            get
            {
                return this.greenCommand ?? (this.greenCommand = new RelayCommand(this.TurnGreen));
            }
        }

        private void TurnGreen()
        {
            this.Color = Colors.Green;
        }

        private Color color = Colors.Red;

        public Color Color
        {
            get
            {
                return this.color;
            }

            set
            {
                this.color = value;
                RaisePropertyChanged("Color");
            }
        }     
    }
}

Есть ли какой-либо способ из View запускать ColorAnimation вместо мгновенного перехода между значениями? То, как я сейчас это делаю, - это еще одно приложение, довольно беспорядочное, поскольку я устанавливаю ViewModel через свойство ViewModel , а затем использую PropertyObserver для отслеживания изменений значений, затем создаю Animation и запускаю ее из программный код:

this.colorObserver = new PropertyObserver(value)
    .RegisterHandler(n => n.Color, this.CreateColorAnimation);

В ситуации, когда я ' м, имея дело со многими цветами и многими потенциальными анимациями, это превращается в настоящий беспорядок и сводит на нет тот факт, что я вручную передаю ViewModel в View, чем просто привязываю их через ResourceDictionary. Полагаю, я мог бы сделать это и в событии DataContextChanged , но есть ли способ лучше?

6
задан Will Eddins 1 June 2011 в 00:33
поделиться