![](/img/trans.png)
[英]Setting and Showing the SelectedItem in ComboBox from VM in WPF Prism MVVM
[英]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.