【发布时间】: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