MVVM Prism WPF - 设置公共属性和SetProperty
问题描述:
我是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();
}
}
}
答
当您更改代码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
看来您的问题与PRISM无关。用数据绑定显示相关的XAML标记。 – dymanoid