Недавно я закончил свое первое приложение с MVVM, в котором было задано количество столбцов/строк и элементов управления.Динамически добавляя строки сетки, заполненные связанными текстовыми полями
То, что я пытаюсь сделать сейчас, основывается на количестве элементов в observableCollection<myClass>
, добавляет строку в основную сетку, заполненную текстовыми полями, привязанными к свойствам в каждом элементе наблюдаемого набора.
Так, например, вот ViewModel пример:
public class VehiclesViewModel : ObservableObject
{
private ObservableCollection<Vehicle> _vehCollection;
public ObservableCollection<Vehicle> VehCollection
{
get
{
return this._vehCollection;
}
set
{
if (null != value)
{
this._vehCollection= value;
OnPropertyChanged("VehCollection");
}
}
}
}
Вот класс модели:
public class Vehicle : INotifyPropertyChanged
{
private double _alt;
public double Alt
{
get { return this._alt; }
set
{
this._alt = value;
base.OnPropertyChanged("Alt");
}
}
private double _depth;
public string Depth
{
get { return this._depth; }
set
{
this._depth = value;
base.OnPropertyChanged("Depth");
}
}
}
Вот пример вид:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="39.8" />
<ColumnDefinition Width="39.8" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="26" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ItemsControl ItemsSource="{Binding VehCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Alt}" Grid.Column="0" Grid.ColumnSpan="2"/>
<TextBox Text="{Binding Depth}"
Grid.Column="3"
Grid.ColumnSpan="2" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Скажем, некоторые функции я называю добавляет три элементов для _vehCollection. Когда это произойдет, я хочу, чтобы сетка добавила три строки под существующими строками, каждая из которых содержит два текстовых поля, которые привязаны к свойствам моего класса Vehicle для каждого из этих элементов. Я также хочу указать Grid.Column
, в котором они появятся (они будут отображаться горизонтально в одной строке, а не вертикально).
Я попытался использовать ItemsControl
, что делает текстовые поля, но отображается в верхнем левом углу сетки. Я не могу заставить его появляться ниже существующих строк.
Примечание: У меня есть намного больше определений строк/столбцов и других элементов управления внутри основной сетки. Я не хочу повторять все это.
если вы связывании iitems затем использовать контроль пунктов (я хотел бы предложить либо ItemsControl или ListView) только пользователь А Сетка для фиксированных макетов, если вы показываете попытку с контролем элементов, мы можем, вероятно, предложить, где вы поступили не так. – MikeT
Добавил элемент itemscontrol в xaml. Эти два текстовых поля отображаются в верхнем левом углу моей сетки. Я хочу, чтобы они появлялись ниже последней существующей строки сетки. – pfinferno
Элемент управления не добавляет элементы в сетку, он добавляет их к себе, полностью удаляет сетку, дайте мне несколько, и ai'll выставит вам пример – MikeT