我可以使用數據綁定來設置WPF框架的初始內容,但對綁定屬性的後續更改(使用INotifyPropertyChange實現)似乎不會更改內容。你可以使用WPF框架的Content屬性進行數據綁定嗎?
此外,有沒有人知道如果以這種方式直接綁定到Content屬性將導致綁定項目出現在框架或NavigationWindow的日記?
一些背景:我意識到我應該使用NavigationService與框架進行交互,但我試圖遵循MVVM模式。數據綁定到Content屬性似乎更簡單...
我可以使用數據綁定來設置WPF框架的初始內容,但對綁定屬性的後續更改(使用INotifyPropertyChange實現)似乎不會更改內容。你可以使用WPF框架的Content屬性進行數據綁定嗎?
此外,有沒有人知道如果以這種方式直接綁定到Content屬性將導致綁定項目出現在框架或NavigationWindow的日記?
一些背景:我意識到我應該使用NavigationService與框架進行交互,但我試圖遵循MVVM模式。數據綁定到Content屬性似乎更簡單...
許多WPF社區同意內置的導航框架被破壞。但是,即使您要使用它,綁定Content屬性也不是正確的方法。如果您想要將MVVM與導航一起使用,您應該將其與FrontController模式結合使用,ViewModel會將一個導航請求分派給Controller,然後Controller將爲您解析該請求。這個概念的例子並不多,因爲(正如我之前提到的)許多開發人員都使用WPF的內置導航。
如果你想看看一個非常強大的WPF導航引擎,look at nRoute它是WPF的MVC路由引擎的一個端口。
Frame是導航主機,因此使用NavigationService導航到不同的內容會更加正確。如果你使用INotifyPropertyChange,我想你會在內容改變時調用相關的事件。然後,我還假設不難使用NavigationService。
您可以對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");
}
}
}
我前幾天就遇到了這個問題。我有一個帶有框架的主窗口,並且我在框架中加載了不同的頁面(通過使用Navigate()
)。頁面的數據綁定被破壞,數據沒有顯示在加載的頁面上。
要修復綁定,請創建或將現有DataContext
添加到框架內的頁面,並且綁定將再次運行。