C# 使用WPF处理MVVM
我刚刚得到了一些关于使用wpf、c#的MVVM的设计/实现问题。我只是想了解一下MVVM,想知道是否有人能证实我的想法,在我的应用程序中,我需要一名员工、一个部门和一家公司。换句话说,我有一个雇员模型,和一个相应的雇员视图模型。现在,当用户单击New Employee时,会弹出一个窗口,其中有4件事、2个组合框、员工姓名字段和一个提交按钮。现在我主要关注的是如何管理两个组合框,一个用于公司,一个用于部门 现在我还有两个模型分别用于company和department以及viewmodels,因为我需要能够添加新的公司或部门 因此,我的第一个问题归结为这样一个事实:我是在Employee Viewmodel中使用公司和部门模型,还是将下拉框绑定到公司或部门的单独Viewmodel?如果是这样的话,如果采用第二种方式,我将如何获得组合框的详细信息 我的第二个问题是,如果你把一个数据网格绑定到一个,比方说,EmployeeListViewModel,如果EmployeeListViewModel中的列表发生任何变化,那么这个数据网格会自动更新吗,或者我必须调用一个函数来重新检查列表,或者我必须重新绑定它吗 任何帮助都会很好:)C# 使用WPF处理MVVM,c#,wpf,mvvm,C#,Wpf,Mvvm,我刚刚得到了一些关于使用wpf、c#的MVVM的设计/实现问题。我只是想了解一下MVVM,想知道是否有人能证实我的想法,在我的应用程序中,我需要一名员工、一个部门和一家公司。换句话说,我有一个雇员模型,和一个相应的雇员视图模型。现在,当用户单击New Employee时,会弹出一个窗口,其中有4件事、2个组合框、员工姓名字段和一个提交按钮。现在我主要关注的是如何管理两个组合框,一个用于公司,一个用于部门 现在我还有两个模型分别用于company和department以及viewmodels,因为
谢谢大家您的视图有两个组合框,需要公开公司和部门项目的集合。这些可能只是模型,但如果将其包装在视图模型中则更好。我假设当您选择一家公司时,部门列表将被更新。您可以查看我建议的解决方案,该解决方案基于父列表的选择更新子列表 您至少有一个要绑定到组合框的项目列表和所选项目的属性。我使用“ItemListViewModel”将它们分组在一起
class MyViewModel : INotifyPropertyChanged
{
public MyViewModel()
{
Companies = new ItemListViewModel<string>();
Departments = new ItemListViewModel<string>();
...
}
public ItemListViewModel<string> Companies { get; set; }
public ItemListViewModel<string> Departments { get; set; }
}
类MyViewModel:INotifyPropertyChanged
{
公共MyViewModel()
{
公司=新项目列表视图模型();
Departments=新的ItemListViewModel();
...
}
public ItemListViewModel公司{get;set;}
public ItemListViewModel部门{get;set;}
}
在XAML中
<ComboBox ItemsSource="{Binding Companies}" />
<ConboBox ItemsSource="{Binding Departments}" />
就开始学习基础知识而言,有很多其他的帖子可以达到这一点,但是对于组合框的设计,上面的内容应该会有所帮助
对于第二个问题,只要ViewModel实现了INotifyPropertyChanged,它就会更新对象绑定到的控件。具有两个组合框的视图将需要公开公司和部门项的集合。这些可能只是模型,但如果将其包装在视图模型中则更好。我假设当您选择一家公司时,部门列表将被更新。您可以查看我建议的解决方案,该解决方案基于父列表的选择更新子列表 您至少有一个要绑定到组合框的项目列表和所选项目的属性。我使用“ItemListViewModel”将它们分组在一起
class MyViewModel : INotifyPropertyChanged
{
public MyViewModel()
{
Companies = new ItemListViewModel<string>();
Departments = new ItemListViewModel<string>();
...
}
public ItemListViewModel<string> Companies { get; set; }
public ItemListViewModel<string> Departments { get; set; }
}
类MyViewModel:INotifyPropertyChanged
{
公共MyViewModel()
{
公司=新项目列表视图模型();
Departments=新的ItemListViewModel();
...
}
public ItemListViewModel公司{get;set;}
public ItemListViewModel部门{get;set;}
}
在XAML中
<ComboBox ItemsSource="{Binding Companies}" />
<ConboBox ItemsSource="{Binding Departments}" />
就开始学习基础知识而言,有很多其他的帖子可以达到这一点,但是对于组合框的设计,上面的内容应该会有所帮助
对于第二个问题,只要ViewModel实现了INotifyPropertyChanged,它就会更新对象绑定到的控件。我会将公司和部门数据放在员工ViewModel中。 以公司为例,我有两个属性
ObservableCollection<CompanyViewModel> ListOfCompanies;
CompanyViewModel SelectedCompany;
可观察到的公司收集清单;
CompanyViewModel selected company;
ListOfCompanies绑定到组合框的itemsource
并且SelectedCompany(双向)绑定到组合框的selectedItem。
这样,您可以在viewmodel中设置选定的公司,它将更新UI,并且当它更改时,UI也将更新viewmodel
根据您填充公司列表和所选公司的方式,您可能需要CompanyViewModel来实现以下接口
IComparable<CompanyViewModel>, IEquatable<CompanyViewModel>
i可比较,i可比较
剩下的就用装订了
至于自动更新您的employee datagrid,我自己更喜欢使用ListView,但是employeeViewModels的可观察集合应该可以很好地刷新
这是我的两位数。我会将公司和部门数据放在员工视图模型中。 以公司为例,我有两个属性
ObservableCollection<CompanyViewModel> ListOfCompanies;
CompanyViewModel SelectedCompany;
可观察到的公司收集清单;
CompanyViewModel selected company;
ListOfCompanies绑定到组合框的itemsource
并且SelectedCompany(双向)绑定到组合框的selectedItem。
这样,您可以在viewmodel中设置选定的公司,它将更新UI,并且当它更改时,UI也将更新viewmodel
根据您填充公司列表和所选公司的方式,您可能需要CompanyViewModel来实现以下接口
IComparable<CompanyViewModel>, IEquatable<CompanyViewModel>
i可比较,i可比较
剩下的就用装订了
至于自动更新您的employee datagrid,我自己更喜欢使用ListView,但是employeeViewModels的可观察集合应该可以很好地刷新
这就是我的价值。不要把员工视图模型看作是员工的模型。将其视为员工视图的一个模型。因此,将要在employee视图中显示的所有内容都需要在视图模型中显示,其中包括填充该视图中的组合框所需的内容,因此将有一个
公司
属性和一个部门
属性