У меня до сих пор есть пять разных пользовательских элементов управления, и в будущем их число может увеличиться. Я хочу добавить их в сетку, используя шаблон MVVM.
У меня есть класс Apparatus, который может служить моделью представления для UserControl.
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 — это еще один класс для хранения положения пользовательских элементов управления в сетке.
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;}
Я хочу добавить пользовательские элементы управления, которые в основном представляют собой такие устройства, как Burette, pippete и т. д., использующие MVVM.
Я просмотрел несколько ответов на этот вопрос и обнаружил, что это можно сделать с помощью DataTemplates и ItemsControl, но проблема в том, что у меня есть только один тип данных, то есть Apparatus для всех мои пользовательские элементы управления, нужно ли мне создавать разные классы для каждого пользовательского элемента управления или есть что-то еще, что я могу сделать.
Теперь все, что я могу сделать, это что-то вроде этого.
<Grid.Resources>
<DataTemplate DataType="{x:Type model:Apparatus }">
<apparatuses:Burette></apparatuses:Burette>
</DataTemplate>
</Grid.Resources>
<ItemsControl ItemsSource="{Binding AppliedApparatus}" >
</ItemsControl>
Это добавляет бюретки к сетке, я не могу ничего добавить, так как все аппараты относятся к типу Appatatus.
Кроме того, может ли кто-нибудь показать мне, как я могу привязать GridProperties в моей модели представления к прикрепленным свойствам сетки UserControls.
UserControl
разными типами в зависимости от экземпляраApparatus
? Если нет, вам не нужно объявлять разные классы для моделей представления или использоватьDataTemplateSelector
. Что касается вышеизложенного, самая большая вещь, которая кажется неуместной, — это использованиеprivate
полей, где обычно используютсяpublic
свойств (для привязки). Но без четкого описания проблемы и хорошего, минимального, полного примера кода который достоверно воспроизводит эту проблему, невозможно точно знать, что именно вы спрашиваете, не говоря уже об ответе. - person Peter Duniho   schedule 15.10.2015Grid.Column
иGrid.Row
. - person Clemens   schedule 16.10.2015