6

我可以使用数据绑定来设置 WPF 框架的初始内容,但是对绑定属性的后续更改(使用 INotifyPropertyChange 实现)似乎不会更改内容。

另外,有谁知道以这种方式直接绑定到 Content 属性是否会导致绑定项目出现在 Frame 或 NavigationWindow 的日志中?

一些上下文:我意识到我可能应该使用 NavigationService 与 Frame 进行交互,但我正在尝试遵循 MVVM 模式。将数据绑定到 Content 属性似乎要简单得多......

4

4 回答 4

7

您可以对 Frame 使用数据绑定,但您需要确保将 Binding 的 Mode 设置为 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");
    }
  }
}
于 2010-05-13T07:11:53.080 回答
4

WPF 社区中的许多人都同意内置导航框架已损坏。但是,即使您要使用它,绑定 Content 属性也不是正确的方法。如果你想将 MVVM 与导航结合使用,你应该将它与 FrontController 模式结合起来,其中 ViewModel 将导航请求分派给控制器,然后控制器会为你解析该请求。这个概念的例子并不多,因为(正如我之前提到的)许多开发人员都使用 WPF 的内置导航。

如果你想看一个非常健壮的 WPF 导航引擎,看 nRoute是 MVC 路由引擎到 WPF 的一个端口。

于 2010-04-26T13:29:56.460 回答
0

Frame是一个导航宿主,所以使用NavigationService导航到不同的内容更正确。如果您使用 INotifyPropertyChange,我想您会在内容更改时调用相关事件。然后,我也假设没有什么难用的 NavigationService 来代替。

于 2010-04-23T19:13:26.580 回答
0

几天前我遇到了这个问题。我有一个带框架的主窗口,我将不同的页面加载到框架中(通过使用Navigate())。页面的数据绑定被破坏,数据没有显示在加载的页面上。

要修复绑定,请DataContext在框架内创建或提供现有页面,绑定将再次起作用。

于 2015-06-03T07:26:40.393 回答