2015-09-05 1 views
0

Я новичок в MVVM и Prism. У меня есть ниже ViewModelMVVM Prism WPF - Настройка публичной собственности и SetProperty

using System.Collections.Generic; 
using BasicMVVMQuickstart_Desktop.Model; 
using Microsoft.Practices.Prism.Mvvm; 

namespace BasicMVVMQuickstart_Desktop.ViewModels 
{ 
    public class QuestionnaireViewModel : BindableBase 
    { 
     private Questionnaire questionnaire; 

     public QuestionnaireViewModel() 
     { 
      this.Questionnaire = new Questionnaire(); 
      this.AllColors = new[] { "Red", "Blue", "Green" }; 

     } 

     public Questionnaire Questionnaire 
     { 
      get { return this.questionnaire; } 
      set { 
       SetProperty(ref this.questionnaire, value); 


      } 
     } 

     public IEnumerable<string> AllColors { get; private set; } 

    } 
} 

Я пытаюсь установить Анкету из другого ViewModel и обновить WPF UI с заданным значением из другого ViewModel. Но, к сожалению, это не сработает. Ниже приведен код для другой модели. Я установил свойство в «private void OnSubmit (object obj)», но когда я запускаю приложение и нажимаю submit, пользовательский интерфейс не получает обновления. Кто-нибудь теперь, что еще нужно добавить для этой работы? Если я установил «this.QuestionnaireViewModel.Questionnaire.Age = 32;» внутри «public MainWindowViewModel()», тогда пользовательский интерфейс обновляется во время выполнения, но с OnSubmit не работает. Пожалуйста помоги.

using System.Diagnostics; 
using System.Text; 
using System.Windows.Input; 
using BasicMVVMQuickstart_Desktop.Model; 
using Microsoft.Practices.Prism.Commands; 
using Microsoft.Practices.Prism.Mvvm; 
namespace BasicMVVMQuickstart_Desktop.ViewModels 
{ 
    public class MainWindowViewModel : BindableBase 
    { 
     public MainWindowViewModel() 
     { 
      this.SubmitCommand = new DelegateCommand<object>(this.OnSubmit); 
      this.QuestionnaireViewModel = new QuestionnaireViewModel(); 
      this.ResetCommand = new DelegateCommand(this.OnReset); 

     } 

     public ICommand SubmitCommand { get; private set; } 

     public ICommand ResetCommand { get; private set; } 

     public QuestionnaireViewModel QuestionnaireViewModel { get; set; } 

     private void OnSubmit(object obj) 
     { 
      Debug.WriteLine(this.BuildResultString()); 
      this.QuestionnaireViewModel.Questionnaire.Age = 32; 
     } 

     private void OnReset() 
     { 
      this.QuestionnaireViewModel.Questionnaire = new Questionnaire(); 

     } 

     private string BuildResultString() 
     { 
      StringBuilder builder = new StringBuilder(); 
      builder.Append("Name: "); 
      builder.Append(this.QuestionnaireViewModel.Questionnaire.Name); 
      builder.Append("\nAge: "); 
      builder.Append(this.QuestionnaireViewModel.Questionnaire.Age); 
      builder.Append("\nQuestion 1: "); 
      builder.Append(this.QuestionnaireViewModel.Questionnaire.Quest); 
      builder.Append("\nQuestion 2: "); 
      builder.Append(this.QuestionnaireViewModel.Questionnaire.FavoriteColor); 
      return builder.ToString(); 
     } 
    } 
} 
+0

Кажется, что ваш вопрос не имеет ничего общего с PRISM. Покажите свою соответствующую разметку XAML с привязкой данных. – dymanoid

ответ

2

При изменении Возраст свойства в коде:

this.QuestionnaireViewModel.Questionnaire.Age = 32; 

Вы можете изменить свойство вопросника, но не свойство QuestionnaireViewModel. Таким образом, вам необходимо наследовать ваш класс вопросников из BindableBase и создать аналогичный код для Age property:

private int _age; 
public int Age 
    { 
     get { return _age; } 
     set { SetProperty(ref _age, value); } 
    } 
+0

Отлично, это было именно то, что мне нужно было сделать. Благодарю. – user3033921