我在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控件。
然而,正如我之前所说的,您当前的代码没有任何严格的错误!