到目前为止,我有五种不同的UserControl,并且这个数字可以在将来增加。我想使用MVVM模式将它们添加到网格中。
我有一个类装置,可以作为UserControl的viewModel
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;
}
类中的每个字段都有公共属性。
还有 ExperimentGridViewModel 之类的
public class ExperimentGridViewModel : ViewModelBaseClass
{
private int _apparatusCount;
private string _workingExperiment;
private int _gridRowCount;
private int _gridColumnCount;
private ExperimentWindowViewModel _windowModel;
private ObservableCollection<Apparatus> _apparatusAppplied;}
我想添加UserControls,基本上是使用MVVM等设备,如Burette,pippete等。
我已经找到了一些答案,并发现可以使用 DataTemplates和ItemsControl 来完成,但问题是我只有一种数据类型,即装置对于我的所有UserControls,我是否需要为每个用户控件创建不同的类,或者我还能做些什么。
现在我所能做的就是这样的事情。
<Grid.Resources>
<DataTemplate DataType="{x:Type model:Apparatus }">
<apparatuses:Burette></apparatuses:Burette>
</DataTemplate>
</Grid.Resources>
<ItemsControl ItemsSource="{Binding AppliedApparatus}" >
</ItemsControl>
这会将滴定管添加到网格中,我无法添加任何其他内容,因为所有设备都是 Appatatus 。
此外,任何人都可以告诉我如何将viewModel中的GridProperties绑定到UserControls的附加网格属性。