0

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

例如我有一堂课:

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

这感觉就像一个真正的黑客,可能不是最佳实践。我是否在这里遗漏了一些东西,如果有,是否有更好的方法来实现这一目标?

4

1 回答 1

1

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

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

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

但是,正如我之前所说,您当前的代码没有任何问题!

于 2012-07-30T08:28:00.520 回答