Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用WPF处理MVVM_C#_Wpf_Mvvm - Fatal编程技术网

C# 使用WPF处理MVVM

C# 使用WPF处理MVVM,c#,wpf,mvvm,C#,Wpf,Mvvm,我刚刚得到了一些关于使用wpf、c#的MVVM的设计/实现问题。我只是想了解一下MVVM,想知道是否有人能证实我的想法,在我的应用程序中,我需要一名员工、一个部门和一家公司。换句话说,我有一个雇员模型,和一个相应的雇员视图模型。现在,当用户单击New Employee时,会弹出一个窗口,其中有4件事、2个组合框、员工姓名字段和一个提交按钮。现在我主要关注的是如何管理两个组合框,一个用于公司,一个用于部门 现在我还有两个模型分别用于company和department以及viewmodels,因为

我刚刚得到了一些关于使用wpf、c#的MVVM的设计/实现问题。我只是想了解一下MVVM,想知道是否有人能证实我的想法,在我的应用程序中,我需要一名员工、一个部门和一家公司。换句话说,我有一个雇员模型,和一个相应的雇员视图模型。现在,当用户单击New Employee时,会弹出一个窗口,其中有4件事、2个组合框、员工姓名字段和一个提交按钮。现在我主要关注的是如何管理两个组合框,一个用于公司,一个用于部门

现在我还有两个模型分别用于company和department以及viewmodels,因为我需要能够添加新的公司或部门

因此,我的第一个问题归结为这样一个事实:我是在Employee Viewmodel中使用公司和部门模型,还是将下拉框绑定到公司或部门的单独Viewmodel?如果是这样的话,如果采用第二种方式,我将如何获得组合框的详细信息

我的第二个问题是,如果你把一个数据网格绑定到一个,比方说,EmployeeListViewModel,如果EmployeeListViewModel中的列表发生任何变化,那么这个数据网格会自动更新吗,或者我必须调用一个函数来重新检查列表,或者我必须重新绑定它吗

任何帮助都会很好:)


谢谢大家

您的视图有两个组合框,需要公开公司和部门项目的集合。这些可能只是模型,但如果将其包装在视图模型中则更好。我假设当您选择一家公司时,部门列表将被更新。您可以查看我建议的解决方案,该解决方案基于父列表的选择更新子列表

您至少有一个要绑定到组合框的项目列表和所选项目的属性。我使用“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视图中显示的所有内容都需要在视图模型中显示,其中包括填充该视图中的组合框所需的内容,因此将有一个
公司
属性和一个
部门
属性