C# 使用MVVM向WPF中的网格添加不同的用户控件
到目前为止,我有五个不同的用户控件,将来这个数量还会增加。我想使用MVVM模式将它们添加到网格中 我有一个类装置,可以作为用户控件的视图模型C# 使用MVVM向WPF中的网格添加不同的用户控件,c#,wpf,xaml,mvvm,user-controls,C#,Wpf,Xaml,Mvvm,User Controls,到目前为止,我有五个不同的用户控件,将来这个数量还会增加。我想使用MVVM模式将它们添加到网格中 我有一个类装置,可以作为用户控件的视图模型 public class Apparatus { private string _appratusName; private string _imageSource; private string _experiments; private GridProperties gridProps; public App
public class Apparatus
{
private string _appratusName;
private string _imageSource;
private string _experiments;
private GridProperties gridProps;
public Apparatus()
{
_appratusName = "";
_imageSource = "";
Experiments = "";
}
public Apparatus(string name, string imgSource, string exp)
{
_appratusName = name;
_imageSource = imgSource;
_experiments = exp;
}}
GridProperties是另一个用于包含UserControls在网格中的位置的类
public class GridProperties
{
public int Row;
public int Column;
public int ColumnSpan;
public int RowSpan;
public GridProperties(int row, int col, int rowSpan, int columnSpan)
{
this.Row = row;
this.Column = col;
this.RowSpan = rowSpan;
this.ColumnSpan = columnSpan;
}
类中的每个字段都有公共属性。
还有一个实验GridViewModel类似于
public class ExperimentGridViewModel : ViewModelBaseClass
{
private int _apparatusCount;
private string _workingExperiment;
private int _gridRowCount;
private int _gridColumnCount;
private ExperimentWindowViewModel _windowModel;
private ObservableCollection<Apparatus> _apparatusAppplied;}
公共类实验GridViewModel:ViewModelBaseClass
{
私人int_仪器计数;
私有字符串\u工作实验;
私有int_gridRowCount;
私有int_gridColumnCount;
私有WindowViewModel\u windowModel;
专用可观测采集设备应用;}
我想添加用户控件,基本上是使用MVVM的滴定管、pippete等设备
我查看了一些答案,发现可以使用数据模板和ItemsControl来完成,但问题是我只有一种数据类型,即设备对于我的所有用户控件,我是否需要为每个用户控件创建不同的类,或者我是否可以做其他事情
现在我能做的就是这样的事情
<Grid.Resources>
<DataTemplate DataType="{x:Type model:Apparatus }">
<apparatuses:Burette></apparatuses:Burette>
</DataTemplate>
</Grid.Resources>
<ItemsControl ItemsSource="{Binding AppliedApparatus}" >
</ItemsControl>
这会将滴定管添加到网格中,我无法添加任何其他内容,因为所有仪器都属于Appatatus类型
另外,请任何人告诉我如何将viewModel中的GridProperties绑定到UserControls的附加网格属性 您可以创建不同的视图模型类(都是从设备派生的),为其声明不同的DataTemplates,或者使用DataTemplateSelector(即设置ItemsControl的ItemTemplateSelector属性)。好的,我将尝试这个,但是,您可以帮助我将的Grid.Column值绑定到设备类中存在的GridProperty.Column。根据
设备
实例,用户控件
对象的类型是否实际不同?如果不是,则不需要为视图模型声明不同的类,也不需要使用DataTemplateSelector
。就上述内容而言,最不合适的地方是使用private
字段,通常使用public
属性(用于绑定)。但是如果没有一个清晰的问题陈述,并且它可靠地再现了这个问题,就不可能确切地知道你在问什么,更不用说答案了。我在问题本身中说过,类中的每个字段都有公共属性,我没有包括它们,因为这会不必要地填充空间,而且用户控件是不同类型的。这对于数据触发器来说非常容易做到,只需为用户控件添加一个样式,并为每个设备类型添加一个单独的datatrigger,从而相应地设置模板属性。