Проблема с настройкой пользовательского свойства в WPF - PullRequest
0 голосов
/ 26 октября 2011

Допустим, у меня есть 2 ViewModels и 1 View

  • ViewModel_A
  • ViewModel_B

  • View_A

во ViewModel_A я получил класс свойства класса PersonClass PersonClass имеет несколько полей

  • Имя
  • Возраст
  • Пол

В View_A я связываю некоторые текстовые поля со свойством PersonClass, которое связывается двумя способами с помощью datacontext ViewModel_A
В ViewModel_B хотите обновить свойство PersonClass из кода .

Какой лучший способ сделать это, потому что я работаю в данный момент, когда я делаю новый экземпляр ViewModel_A в ViewModel_B и затем устанавливаю свойство PersonClass.

ViewModel_A viewModel_A = new ViewModel_A();

viewModel_A.PersonClass.Name = someString;
viewModel_A.PersonClass.Age = someString;

...

Как будто я делаю это сейчас, я получил 2 разных экземпляра ViewModel_A, поэтому мое свойство PersonClass никогда не заметит никаких изменений ...
Какое лучшее решение для решения этой проблемы?

1 Ответ

1 голос
/ 26 октября 2011

Ваш PersonClass должен реализовывать INotifyPropertyChanged , и ваш View должен получить экземпляр Viewmodel, установленный как DataContext .Хороший способ работы с вложенными моделями представления - использовать ContentControl s. Это, конечно, не обязательно, но добавляет хороший способ настройки, просто переключение вспомогательной модели представления позволяет изменять части пользовательского интерфейса.

class ViewModel_B
{
    public ViewModel_A MySubViewModel{get;set;}
}

<DataTemplate x:Key="vmaTemplate" DataType="{x:Type ViewModel_A}">
    <TextBlock Text="{Binding PersonClass.Name}"/>
</DataTemplate>

<Grid>
    <ContentControl Content="{Binding MySubViewModel}" 
           ContentTemplate="{StaticTemplate vmaTemplate}"/>
</Grid>

В этом примере предполагается, что Grid имеет в качестве DataContext экземпляр ViewModel_B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...