Можно ли использовать привязку данных со свойством Content Кадра WPF?

Я могу использовать привязку данных для установки начального Содержания Кадра WPF, но последующие изменения связанное свойство (реализованное использование INotifyPropertyChange), кажется, не изменяют содержание.

Кроме того, кто-либо знает, если привязка непосредственно к свойству Content таким образом заставит связанный объект появляться в Кадре или журнале NavigationWindow?

Некоторый контекст: Я понимаю, что должен, вероятно, использовать NavigationService для взаимодействия с Кадром, но я пытаюсь следовать за шаблоном MVVM. Кажется, что было бы намного более просто связать с данными к свойству Content...

6
задан dthrasher 23 April 2010 в 17:53
поделиться

3 ответа

Многие в сообществе WPF согласны с тем, что встроенная среда навигации не работает. Однако, даже если бы вы использовали его, привязка свойства Content не является правильным подходом. Если вы хотите использовать MVVM с навигацией, вы должны объединить его с шаблоном FrontController, где ViewModel отправляет запрос навигации в контроллер, который затем разрешает этот запрос за вас. Доступно не так много примеров этой концепции, потому что (как я уже упоминал ранее) многие разработчики переходят на использование встроенной навигации WPF.

Если вы хотите взглянуть на очень надежный механизм навигации для WPF, посмотрите на nRoute . Это порт механизма маршрутизации MVC для WPF.

3
ответ дан 10 December 2019 в 00:35
поделиться

Фрейм - это узел навигации, поэтому правильнее использовать NavigationService для перехода к другому контенту. Если вы используете INotifyPropertyChange, я полагаю, что вы вызываете связанное событие всякий раз, когда изменяется контент. Тогда я также полагаю, что вместо этого нетрудно использовать NavigationService.

0
ответ дан 10 December 2019 в 00:35
поделиться

Вы можете использовать привязку данных к фрейму, но вам нужно убедиться, что для режима привязки установлено значение TwoWay.

XAML:

<Frame Content={Binding Path=MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} />

Просмотр модели:

public class MyViewModel : INotifyPropertyChanging, INotifyPropertyChanged
{
  public Page MyProperty
  {
    get
    {
      return _viewModelPage;
    }

    set
    {
      this.OnPropertyChanging("MyProperty");
      _viewModelPage = value;
      this.OnPropertyChanged("MyProperty");
    }
  }
}
7
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: