2012-07-29 94 views
0

我在WP7中遇到了綁定問題,無法找到有助於解決問題的示例或博客。我的應用程序有一個ViewModel,當從一個主頁面(列表)瀏覽到一個編輯/詳細頁面時,我遇到了在同一頁面上正確顯示ListPicker和Object數據的問題。我已經成功完成了這項工作,但希望爲此找到最佳做法。WP7中的主要細節綁定

比如我有一個類:

public class Person 
    { 
     public string Name { get; set; } 
     public string Gender { get; set; } 
    } 

類也是在我的視圖模型引用:

public Person selectedPerson; 
private Person _person 
{ 
    get { return _person; } 
    set 
    { 
     _person= value; 
     NotifyPropertyChanged("selectedPerson"); 
    } 
} 

我有一個Detail.xaml頁:

<StackPanel x:Name="PersonEditPanel"> 
    <TextBox x:Name="NameTextBox" Text="{Binding Name}" /> 
    <TextBox x:Name="GenderTextBox" Text="{Binding Gender}" /> 
</Stackpanel> 

而且在我的代碼背後,我有:

private void PhoneApplicationPage_Loaded(object sender, EventArgs e) 
{ 
    DataContext = App.ViewModel.selectedPerson; 
} 

以上是好的,但我想爲Gender屬性添加一個ListPicker以改善用戶體驗。

要做到這一點,我添加了一個新的類:

public class TypeList 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 

,加入一個觀察集合到我的視圖模型:

private ObservableCollection<TypeList> _PersonGenderTypeList; 
    public ObservableCollection<TypeList> PersonGenderTypeList 
    { 
     get { return _PersonGenderTypeList; } 
     set 
     { 
      _PersonGenderTypeList = value; 
      NotifyPropertyChanged("PersonGenderTypeList"); 
     } 
    } 

我已經嘗試了許多選項的唯一途徑,我可以找到在哪裏我能夠看到正確綁定的人名和性別列表在屏幕上(同時)選取和填充如下:

private void PhoneApplicationPage_Loaded(object sender, EventArgs e) 
{ 
    DataContext = App.ViewModel.selectedPerson; 
    GenderTypeListPicker.ItemsSource = App.ViewModel.PersonGenderTypeList; 
} 

這感覺像一個真正的黑客,可能不是最佳實踐。我在這裏錯過了什麼,如果有的話是否有更好的方法來實現這一目標?

+0

我認爲這樣做可以完成這個工作,並且可以在您提到的類中使用。 如果您只想設置datacontext,則需要創建一個PersonViewModel,該PersonViewModel將暴露Name,Gender和ObservableCollection PersonGenderTypeList。對我來說,這聽起來像是一個更糟糕的黑客,而不是像剛纔那樣設置itemssource。 – 2012-07-29 16:58:15

回答

1

我不會將你的代碼分類爲黑客,它很簡單,並且完成這項工作。你可以利用MVVM模式並創建「背上」視圖模型的頁面,同時包含選定人員和性別:

public PersonDetailsViewModel 
{ 
    public Person SelectedPerson {get;set;} 
    public ObservableCollection<TypeList> GenderList {get;set;} 
} 

然後,您可以設置此視圖模型的實例作爲的DataContext您的視圖,然後綁定XAML中的各種UI控件。

但是,正如我之前所說的,您當前的代碼沒有嚴重錯誤!

+0

謝謝你,這似乎我擔心一個非問題。出於興趣,在Detail.xaml頁面的XAML中 - 綁定到SelectedPerson的最佳方式是什麼?這應該是DataTemplate的特定結構嗎? – Gavin 2012-07-30 21:12:45