Простые часы модели представления


Я пытался обернуть мою голову вокруг в MVVM за последнюю неделю или больше и все еще немного трудно. Я наблюдала, как Джейсон Dolingers в MVVM они и прошли через Рид Copsey уроки и до сих пор задаюсь вопросом, если я делаю это правильно... я нашел оба источника очень интересные, но немного по-другому на подход. Если у кого есть другие ссылки, мне будет интересно, а мне бы очень хотелось этому научиться.

Что является лучшей практики для модели, чтобы предупредить в ViewModel что-то случилось? Как вы увидите в приведенном ниже коде, я создал очень простое приложение. Я использую событие в моей модели, но я не уверен, если это лучший способ справиться с этим. Выходные данные программы, как и ожидалось, однако меня больше интересует, если я на самом деле правильно, используя образец. Любые мысли, комментарии и т. д. будут оценены.

Моя модель

using System;
using System.Threading;

namespace Clock
{
    public class ClockModel
    {
        private const int TIMER_INTERVAL = 50;

        private DateTime _time;

        public event Action<DateTime> TimeArrived;

        public ClockModel()
        {
            Thread thread = new Thread(new ThreadStart(GenerateTimes));
            thread.IsBackground = true;
            thread.Priority = ThreadPriority.Normal;
            thread.Start();
        }

        public DateTime DateTime
        {
            get
            {
                return _time;
            }
            set
            {
                this._time = value;
                if (TimeArrived != null)
                {
                    TimeArrived(DateTime);
                }
            }
        }

        private void GenerateTimes()
        {
            while (true)
            {
                DateTime = DateTime.Now;
                Thread.Sleep(TIMER_INTERVAL);
            }
        }
    }
}

Мой Взгляд

<Window x:Class="Clock.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ViewModels="clr-namespace:Clock"
        Title="MainWindow" Height="75" Width="375">
    <Window.DataContext>
        <ViewModels:ClockViewModel />
    </Window.DataContext>
    <StackPanel Background="Black">
            <TextBlock Text="{Binding Path=DateTime}" Foreground="White" Background="Black" FontSize="30" TextAlignment="Center" />
    </StackPanel>
</Window>

Моей Модели Представления

using System;
using System.ComponentModel;

namespace Clock
{
    public class ClockViewModel : INotifyPropertyChanged
    {
        private DateTime _time;
        private ClockModel clock;

        public ClockViewModel()
        {
            clock = new ClockModel();
            clock.TimeArrived += new Action<DateTime>(clock_TimeArrived);
        }

        private void clock_TimeArrived(DateTime time)
        {
            DateTime = time;
        }

        public DateTime DateTime 
        {
            get
            {
                return _time;
            }

            set
            {
                _time = value;
                this.RaisePropertyChanged("DateTime");
            }
        }


        /// <summary>
        /// Occurs when a property value changes.
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// Raises the property changed event.
        /// </summary>
        /// <param name="propertyName">Name of the property.</param>
        private void RaisePropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }
}


3177
6
задан 11 апреля 2011 в 01:04 Источник Поделиться
Комментарии
2 ответа

Кажется, ваша реализация-это правильно. Вы также касаетесь общее обсуждение в MVVM.

В MVVM должны в ViewModel или модель реализовать INotifyPropertyChanged в?

Можно утверждать, что вы могли бы позволить модели реализовать INotifyPropertyChanged в. Мне не хватает опыта с MVVM, чтобы ответить на этот вопрос с профессионалом/аргументации "против".

Однако главной целью реализуется и разделение есть в любом случае.

5
ответ дан 11 апреля 2011 в 07:04 Источник Поделиться

Нашел эту ссылку, которая оказалась полезной для меня:

http://karlshifflett.wordpress.com/2010/11/07/in-the-box-ndash-mvvm-training/

Это объясняет MVVM и что каждая ее часть. Я также была (и остаюсь) поиск правильных способов реализовать шаблон MVVM, но, как говорится, есть много разных способов. Одним из них является, например, М-МВ-в-ВМ; модель вида модели - Вид с ViewModel, который я использую @работы. Это потому, что модель на самом деле класс сущностей (идет прямо из БД, не могу с этим поделать), и поэтому я решил сделать ViewModel для модели (класс-обертку), а затем реализовать INotifyPropertyChanged в там.

На самом деле, если подумать, я предпочитаю оставить в покое модель, сущность или нет. Так как в качестве возможной модели.

3
ответ дан 19 апреля 2011 в 06:04 Источник Поделиться