Где текст данных для CustomerViewModel в официальной статье MSDN MVVM? - PullRequest
0 голосов
/ 01 мая 2010

Я говорю о статье Джоша Смита.

Может кто-нибудь показать мне, как конкретно CustomerView.xaml это: j

 <TextBox 
  x:Name="firstNameTxt"
  Grid.Row="2" Grid.Column="2" 
  Text="{Binding Path=FirstName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 
  Validation.ErrorTemplate="{x:Null}"
  />

Почему существует привязка к FirstName, которая является публичным свойством в CustomerViewModel.

Существует набор текста данных для MainViewModel, но не для CustomerViewModel, так почему же привязка работает ???

1 Ответ

0 голосов
/ 01 мая 2010

Проверьте ResourceDictionary в MainWindowResources.xaml. Джош использует следующий код для описания того, какой View следует использовать, если в главном окне отображается экземпляр CustomerViewModel:

   <DataTemplate DataType="{x:Type vm:CustomerViewModel}">
        <vw:CustomerView />
   </DataTemplate>

Мы описали, что когда наш DataType имеет тип CustomerViewModel, мы создадим новый экземпляр CustomerView. WPF заботится о DataContext и создании, когда видит тип CustomerViewModel.

Из остальной части статьи:

Применение представления к модели представления MainWindowViewModel косвенно добавляет и удаляет рабочую область ViewModel объекты в и из главного окна Управление вкладками. Полагаясь на данные обязательный, свойство Content TabItem получает Производный от ViewModelBase объект для дисплей. ViewModelBase не является пользовательским интерфейсом элемент, поэтому он не имеет внутренней поддержки для рендеринга себя. По умолчанию в WPF невизуальный объект отображается отображение результатов звонка его метод ToString в TextBlock. Это явно не то, что вам нужно, если ваши пользователи не горят желание увидеть имя типа нашего Классы ViewModel! Вы можете легко сказать WPF как визуализировать объект ViewModel с использованием типизированных шаблонов данных. Типизированный DataTemplate не имеет ключа x: значение присвоено ему, но оно имеет его свойство DataType установлено в экземпляр класса Type. Если WPF пытается отрендерить одну из ваших ViewModel объекты, он проверит, если Система ресурсов имеет типизированный DataTemplate в области действия которого DataType такой же как (или базовый класс) тип вашего объекта ViewModel. Если он находит один, он использует этот шаблон для визуализировать объект ViewModel, на который есть ссылка по свойству Content элемента tab. Файл MainWindowResources.xaml имеет Ресурсный словарь. Этот словарь добавляется в ресурс главного окна иерархия, что означает, что ресурсы, которые он содержит, находятся в объем ресурса окна. Когда вкладка содержимое элемента установлено на ViewModel объект, типизированный DataTemplate из этого словарь предоставляет представление (то есть пользовательский элемент управления), чтобы отобразить его, как показано на рисунке 10.

DataContext для MainViewModel в App.xaml.cs служит отправной точкой для нашего приложения.

...