【问题标题】:Master Detail Binding in WP7WP7 中的主从绑定
【发布时间】:2012-07-27 11:20:34
【问题描述】:

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

这感觉像是一个真正的 hack,可能不是最佳实践。我是否在这里遗漏了什么,如果有,是否有更好的方法来实现这一点?

【问题讨论】:

  • 我认为这可以完成工作,并且在您提到的类的用例中没问题。如果你只想设置数据上下文,你需要创建一个 PersonViewModel,它会暴露一个 Name、Gender 和 ObservableCollection PersonGenderTypeList。对我来说,这听起来比像一开始那样设置 itemssource 更糟糕。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢你,看来我在担心一个非问题。出于兴趣,在 Detail.xaml 页面的 XAML 中 - 绑定到 SelectedPerson 的最佳方式是什么?这应该是 DataTemplate 的特定结构吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多