2010-04-23 36 views
3

我可以使用數據綁定來設置WPF框架的初始內容,但對綁定屬性的後續更改(使用INotifyPropertyChange實現)似乎不會更改內容。你可以使用WPF框架的Content屬性進行數據綁定嗎?

此外,有沒有人知道如果以這種方式直接綁定到Content屬性將導致綁定項目出現在框架或NavigationWindow的日記?

一些背景:我意識到我應該使用NavigationService與框架進行交互,但我試圖遵循MVVM模式。數據綁定到Content屬性似乎更簡單...

回答

3

許多WPF社區同意內置的導航框架被破壞。但是,即使您要使用它,綁定Content屬性也不是正確的方法。如果您想要將MVVM與導航一起使用,您應該將其與FrontController模式結合使用,ViewModel會將一個導航請求分派給Controller,然後Controller將爲您解析該請求。這個概念的例子並不多,因爲(正如我之前提到的)許多開發人員都使用WPF的內置導航。

如果你想看看一個非常強大的WPF導航引擎,look at nRoute它是WPF的MVC路由引擎的一個端口。

0

Frame是導航主機,因此使用NavigationService導航到不同的內容會更加正確。如果你使用INotifyPropertyChange,我想你會在內容改變時調用相關的事件。然後,我還假設不難使用NavigationService。

5

您可以對Frame使用數據綁定,但您需要確保您的綁定模式設置爲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"); 
    } 
    } 
} 
0

我前幾天就遇到了這個問題。我有一個帶有框架的主窗口,並且我在框架中加載了不同的頁面(通過使用Navigate())。頁面的數據綁定被破壞,數據沒有顯示在加載的頁面上。

要修復綁定,請創建或將現有DataContext添加到框架內的頁面,並且綁定將再次運行。

相關問題