2015-09-05 436 views
0

我是MVVM和Prism的新手。我有以下视图模型MVVM 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; } 

    } 
} 

我试图从另一个视图模型设置调查问卷,并与另一视图模型设定值更新WPF UI。但不幸的是它不起作用。以下是其他视图模型的代码。我将属性设置为“private void OnSubmit(object obj)”,但是当我运行应用程序并按下提交时,UI不会更新。现在任何人都需要为这项工作添加什么?如果我设置“this.QuestionnaireViewModel.Questionnaire.Age = 32;”内部“公共MainWindowViewModel()”,然后UI在运行时更新,但与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

当您更改代码Age属性:

this.QuestionnaireViewModel.Questionnaire.Age = 32; 

您更改QuestionnaireViewModel问卷的财产,但不属性。因此,您需要从BindableBase继承您的调查问卷类,并为Age属性创建类似的代码:

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

太棒了,那正是我需要做的事情。谢谢。 – user3033921