2011-08-02 16 views
1

我有一個基本的XAML頁面,它是導航佈局的基礎,頂部有按鈕,可以打開各種視圖。這是使用導航FrameUriMapper完成的。導航主頁與後續視圖/頁面之間的數據綁定

我已經在導航面板上放置了一些控件(準確地說是DatePicker),因爲視圖需要這些控件來過濾數據。

但是,我不知道如何將任何類型的數據綁定應用於後續的視圖,畢竟這是單獨的XAML文件。

我需要能夠從DataPicker s讀取值,並且理想情況下會對由用戶更改的值做出反應。

我應該怎麼做呢?

回答

1

這是我會傾向於做的。

使用這種模式創建CriteriaService類: -

public CriteriaService : INotifyPropertyChanged 
{ 
     private DateTime myStartDate; 
     public DateTime StartDate 
     { 
      get { return myStartDate; } 
      set { myStartDate = value; //Notify property changed } 
     } 

     // Other criteria properties here 

     //INotifyPropertyChanged implemenation 
} 

現在這個服務的一個實例添加到App.Xaml.cs: -

<local:CriteriaService x:Key="CritreaService" /> 

在你的主頁你做這樣的事情這一點: -

<Grid x:Name="LayoutRoot" DataContext="{StaticResource CriteriaService}"> 

,這樣就可以使用簡單的綁定像SelectedDate="{Binding StartDate}"在您的標準控件中。

現在在您的各種頁面中您可以選擇。在代碼中,你可以訪問CriteriaService爲: -

CriteriaService criteria = App.Resources["CriteriaServices"] as CriteriaService; 

或者,如果你想從它綁定到值在您的XAML頁面,你可以使用類似: -

<local:SomeStrangeControl StartDate="{Binding StartDate Source={StaticResource CriteriService}}" /> 
+0

我有一些問題與靜態資源(不是你的錯,我只是使用部分由RIA服務生成的代碼),但除此之外,它似乎工作! :) 謝謝! – Shaamaan

+0

我還有一個關於這個問題(我希望你會讀到這個)。我已經將兩個'DateTimePicker'控件綁定到'CriteriaService'中的'DateTime'字段。由於其中一個代表「開始日期」,另一個代表「結束日期」,因此我需要確保結束不是比開始的「更早」。使用setter很容易,並且值設置正確,但實際的SL'DateTimePicker'控件仍然顯示舊的選擇。我甚至綁定了'DisplayDate',但它仍然是一樣的。我錯過了什麼? – Shaamaan