Можно ли использовать привязку данных со свойством Content фрейма WPF? - PullRequest
5 голосов
/ 23 апреля 2010

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

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

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

Ответы [ 4 ]

7 голосов
/ 13 мая 2010

Вы можете использовать привязку данных к кадру, но вам нужно убедиться, что режим привязки установлен на 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");
    }
  }
}
3 голосов
/ 26 апреля 2010

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

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

0 голосов
/ 03 июня 2015

Я столкнулся с этой проблемой несколько дней назад.У меня было главное окно с рамкой, и я загружал в нее разные страницы (используя Navigate()).Привязки данных страниц были разорваны, данные не отображаются на загруженной странице.

Чтобы восстановить привязки, создайте или передайте существующий DataContext странице внутри фрейма, и привязки будут работатьеще раз.

0 голосов
/ 23 апреля 2010

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

...