Wpf打开多窗口Mvvm



首先对不起我的英语

我有一个阶级的人,有一些属性

class Person
{
//Properties
}

和窗口人员搜索这是该窗口的视图模型包含人员列表并使用Mvvm

class PersonSearchViewModel
{
public PersonSearchViewModel(Person person)
{
SelectedPerson = person;
}
public Person SelectedPerson { set; get; }
public ObservableCollection <Person> PersonList { set; get; }
}

和窗口人员信息以插入和更新

class PersonInformationView : Window
{
public PersonInformationView()
{
InitializeComponent();
this.DataContex = vm;
}
PersonInforamtionViewModel vm = new PersonInforamtionViewModel();
private void buttonOpenSearch_Click(object sender, RoutedEventArgs e)
{
PersonSearchView p = new PersonSearchView(vm.PersonInfo);
}
}

以及该窗口的视图模型

class PersonInforamtionViewModel
{
public Person PersonInfo { set; get; }
}

当打开窗口时,我需要从窗口人员信息和所选人员项目搜索。。。更改Auto属性===>PersonInfo实现一流是的一项责任

您的问题是您正在从视图中驱动所有内容。在MVVM中,应该是虚拟机负责并驱动一切。视图只是虚拟机的包装

目前,您正在从PersonInformationView创建PersonSearchView,但这使您无法看到PersonSearchView中的PersonSearchViewModel,而具有SelectedPerson的是PersonSearchViewModel

相反,您应该从PersonInformationViewModel创建PersonSearchViewModel。这样,您就可以对PersonSearchViewModel.SelectedPerson中的更改做出反应,可以订阅PropertyChanged,也可以更好地将回调委托传递到PersonSearchViewModel构造函数中,该构造函数应该在人员选择人员时调用。

最新更新