использование MVVM-Light - это правильный способ вызывать события? и куда должна идти настойчивость? - PullRequest
1 голос
/ 06 июня 2011

Посмотрев на MVVM-Light и приведя несколько примеров, я собрал этот простой пример.См. Ниже, я показываю одно свойство, которое я подключаю, если я изменяю текстовое поле, текстовое поле обновляется.

Мои вопросы

1) Должна ли виртуальная машина управлять повышениемсобытия изменения реквизита?Некоторые примеры (включая макросы из mvvm-light) показывают, что RaisePropertyChanged из модели, но я не видел, как viewmodel должен был подписаться на уведомление.

В этом примере показано, как виртуальная машина вызывает событие

http://dotnet.dzone.com/articles/mvvm-light-whats-messenger?mz=27249-windowsphone7

показывает модель представления, вызывающую события.

2) Куда направить модель в хранилище данных?Будет ли это в модели или модели представления?

3) После чтения из магазина, как представление получает уведомление о начальных значениях?Я полагаю, что ответ на этот вопрос в большой степени зависит от ответа на вопрос 2).

Спасибо.

Модель

    public string StringOne
    {
        get { return stringOne; }

        set
        {
            if (stringOne == value) return;
            stringOne = value;
           // RaisePropertyChanged("StringOne");
        }
    }

Вид

    <TextBlock x:Name="StringOneLabel" Text="StringOne" Margin="30,125,341,0" Height="41" VerticalAlignment="Top" />
    <TextBlock x:Name="StringOne"  Text="{Binding StringOne}" Margin="145,125,86,0" Height="41" VerticalAlignment="Top" />
    <TextBox Height="78" Text="{Binding StringOne}" HorizontalAlignment="Left" Margin="145,258,0,0" Name="txtStringOne" VerticalAlignment="Top" Width="249" >
    <Custom:Interaction.Triggers>
        <Custom:EventTrigger EventName="TextChanged">
            <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding StringOneTextChanged}" CommandParameter="{Binding ElementName=txtStringOne}" />
        </Custom:EventTrigger>
    </Custom:Interaction.Triggers>
    </TextBox>

ViewModel

    public string StringOne
    {
        get { return SettingsModel.StringOne; }
        set
        {
            var oldValue = SettingsModel.StringOne;
            SettingsModel.StringOne = value;
            RaisePropertyChanged("StringOne", oldValue, value, true);
        }
    }

1 Ответ

2 голосов
/ 06 июня 2011
  1. Вы можете обрабатывать уведомления об изменениях свойств либо в Model, либо в ViewModel.Обработка этого в ViewModel является способом "mvvm-purist", в то время как обработка этого в модели часто более удобна, особенно для небольших приложений.

  2. Сохранение модели в хранилищеработа ВМ.Модель - это не более чем фиктивный объект данных.

  3. Представление привязывается к свойствам ViewModel или Model.Когда они изменяются, он автоматически обновляется при условии, что вызывается уведомление PropertyChange.

    Вы можете либо открыть свойства модели для представления из ViewModel, как пример, который вы опубликовали (подход mvvm-purist), или представить всю модель для представления из ViewModel (часто быстрее для кодирования.уведомление об изменении свойства).Во втором случае вы привязываете свое представление к чему-то вроде MyViewModel.CurrentModel, и всякий раз, когда ViewModel изменяет объект CurrentModel, представление обновляется.1018 * этот пост мой.Это очень простой пример MVVM, который показывает, что содержит каждый слой MVVM.

...