簡體   English   中英

MVVM Prism WPF-設置公共屬性和SetProperty

[英]MVVM Prism WPF - Setting a public property and SetProperty

我是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();
        }
    }
}

當您在代碼中更改Age屬性時:

this.QuestionnaireViewModel.Questionnaire.Age = 32;

您更改調查問卷的屬性,但不更改QuestionnaireViewModel的屬性。 因此,您需要從BindableBase繼承您的Questionnaire類,並為Age屬性創建類似的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM