WP7でのバインドに問題があり、役立つ例やブログが見つかりません。私のアプリケーションにはViewModelがあり、メインページ(リスト)から編集/詳細ページに移動するときに、同じページに正しくバインドされたListPickerデータとObjectデータを表示する際に問題が発生します。私はなんとかこの仕事をすることができましたが、これのベストプラクティスを見つけたいと思います。
たとえば、私はクラスを持っています:
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; }
}
そして、観察可能なコレクションをViewModelに追加します。
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;
}
これは実際のハックのように感じられ、おそらくベストプラクティスではありません。私はここで何かが欠けていますか?もしそうなら、これを達成するためのより良い方法はありますか?