【问题标题】:MVVM Prism WPF - Setting a public property and SetPropertyMVVM Prism WPF - 设置公共属性和 SetProperty
【发布时间】:2015-09-05 01:05:16
【问题描述】:

我是 MVVM 和 Prism 的新手。我有下面的 ViewModel

    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;”在 "public 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();
        }
    }
}

【问题讨论】:

  • 看来您的问题与PRISM无关。使用数据绑定显示相关的 XAML 标记。

标签: c# wpf mvvm prism


【解决方案1】:

当您在代码中更改 Age 属性时:

this.QuestionnaireViewModel.Questionnaire.Age = 32;

您更改了 Questionnaire 的属性,但没有更改 QuestionnaireViewModel 的属性。因此,您需要从 BindableBase 继承您的 Questionnaire 类并为 Age 属性创建类似的代码:

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

【讨论】:

  • 太好了,这正是我需要做的事情。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多