WP7中的主细节绑定



我在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;
}

以上内容很好,但我想为"性别"属性添加一个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;
}

这感觉像是一个真正的黑客,可能不是最好的做法。我在这里错过了什么吗?如果是的话,有更好的方法来实现这一点吗?

我不会把你的代码归类为黑客,它很简单,可以完成任务。您可以利用MVVM模式创建一个视图模型,该模型"支持"页面,包含所选人员和性别:

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

然后,您可以将此视图模型的实例设置为视图的DataContext,然后在XAML中绑定各种UI控件。

然而,正如我之前所说的,您当前的代码没有任何严格的错误!

最新更新