Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > mvvm события


Автор: gambit 28.10.2010, 13:32
добрый день. Почитал несколько статей, но этот момент так и не понял.
Расскажите пож.
Конкретно, мне сейчас надо что бы команда была подписана на событие изменения размера UserControl.
модель mvvm мою была взята с этой статьи http://megadarja.blogspot.com/2010/04/mvvm-wpf.html

Добавлено через 1 минуту и 54 секунды
во всех примерах используется пространство имен System.Windows.Interactivity который я в упор не нахожу(((

Автор: rooks 28.10.2010, 14:14
Сборка System.Windows.Interactivity.dll не входит в .Net framework, она входит в состав Blend SDK:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75e13d71-7c53-4382-9592-6c07c6a00207 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75e13d71-7c53-4382-9592-6c07c6a00207

Автор: gambit 28.10.2010, 14:45
Тогда как иначе? Без данной библиотеки?

Автор: rooks 29.10.2010, 14:32
так они весят по 40 килобайт каждая
по другому через Attached Properties, но это искать надо

Автор: WolfTheGrey 31.10.2010, 01:36
Что то я ни чего найти не могу. Нет у меня класса: ViewModelBase. Хоть и все файлы по скачивал по ссылкам выше приводимых.

Автор: rooks 1.11.2010, 11:15
по первой ссылке
Цитата
BookViewModel унаследован от класса ViewModelBase, который заботливо сгенерил нам MVVM Toolkit. ViewModelBase же, в свою очередь, реализует интерфейс INotifyPropertyChanged и содержит функцию OnPropertyChanged. Все это нужно для того, чтобы всегда можно было вызвать событие "изменилось такое-то поле".

пример реализации
Код
    /// <summary>
    /// Base class for all ViewModel classes in the application. It provides support for property change notifications 
    /// and has a DisplayName property.  This class is abstract.
    /// </summary>
    public abstract class ViewModelBase : INotifyPropertyChanged, IDisposable
    {
        private readonly Dispatcher _dispatcher;

        /// <summary>
        /// Returns the dispatcher object to perform operations on UI thread.
        /// </summary>
        protected Dispatcher Dispatcher
        {
            get { return _dispatcher; }
        }

        /// <summary>
        /// Returns the user-friendly name of this object. Child classes can set this property to a new value,
        /// or override it to determine the value on-demand.
        /// </summary>
        public virtual string DisplayName { get; protected set; }

        protected ViewModelBase()
        {
            if (System.Windows.Application.Current != null)
            {
                _dispatcher = System.Windows.Application.Current.Dispatcher;
            }
            else
            {
                //this is useful for unit tests where there is no application running 
                _dispatcher = Dispatcher.CurrentDispatcher;
            }
        }
        
        #region INotifyPropertyChanged Members

        /// <summary>
        /// Raised when a property on this object has a new value.
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// Raises this object's PropertyChanged event.
        /// </summary>
        /// <param name="propertyName">The property that has a new value.</param>
        protected virtual void OnPropertyChanged(string propertyName)
        {
            VerifyPropertyName(propertyName);

            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                var e = new PropertyChangedEventArgs(propertyName);
                handler(this, e);
            }
        }

        #endregion // INotifyPropertyChanged Members

        #region IDisposable Members

        /// <summary>
        /// Invoked when this object is being removed from the application
        /// and will be subject to garbage collection.
        /// </summary>
        public void Dispose()
        {
            OnDispose();
        }

        /// <summary>
        /// Child classes can override this method to perform 
        /// clean-up logic, such as removing event handlers.
        /// </summary>
        protected virtual void OnDispose()
        {
        }

        #endregion // IDisposable Members
    }

Автор: Kaerus 1.11.2010, 14:58
WolfTheGrey
Есть же готовые фрейморки для MVVM, лично я использую http://www.galasoft.ch/mvvm/getstarted/, там и шорткаты есть для ускорения работы

Автор: ДобренькийПапаша 1.11.2010, 18:15
А где можно почитать про mvvm толковую статью и статью о связке mvvm + silverlight или mvvm + wpf? Я asp.net не владею, знаю, что есть книжки а-ля "asp.net mvvm".

Автор: rooks 1.11.2010, 18:31
ДобренькийПапаша,  MVVM как раз и появился как модификация MVP специально для разработки под WPF/Silverlight.

Автор: Kaerus 1.11.2010, 20:47
Цитата(ДобренькийПапаша @ 1.11.2010,  18:15)
А где можно почитать про mvvm толковую статью и статью о связке mvvm + silverlight или mvvm + wpf? Я asp.net не владею, знаю, что есть книжки а-ля "asp.net mvvm".

http://rutracker.org/forum/viewtopic.php?t=3047259

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)