WP7中的主细节绑定

时间:2012-07-29 15:38:55

标签: c# silverlight windows-phone-7 data-binding mvvm

我在WP7中使用Binding时遇到问题,无法找到有用的示例或博客。我的应用程序有一个ViewModel,当从主页面(列表)导航到编辑/详细信息页面时,我遇到了在同一页面上正确绑定ListPicker和Object数据的问题。我已经成功完成了这项工作,但希望找到最佳实践。

例如我有一个班级:

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

该类也在我的viewmodel中引用:

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

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

1 个答案:

答案 0 :(得分:1)

我不会将您的代码归类为黑客,它很简单并且可以完成工作。您可以使用MVVM模式并创建一个“支持”页面的视图模型,其中包含所选人员和性别:

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

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

但是,正如我之前所说,你当前的代码没有严格的错误!