Я устанавливаю родительский элемент usercontrol
, который содержит 4 элемента управления (2 checkbox
и 2 textboxes
) в строке, и эти 4 controls
повторяются, как десять раз по вертикали вниз.Вместо того, чтобы повторять эти четыре элемента управления, есть ли способ сделать его еще одним usercontrol
и добавить его как один элемент управления в родительский элемент usercontrol
и связать его с помощью родительского элемента viewmodel
в MVVM
?
Я думал о том, чтобы создать их как отдельные элементы управления, и это было очень сложно, глядя на код.
Parent usercontrol
xaml
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<CheckBox Grid.Column="0" Margin="5,2.5,5,0" IsChecked="{Binding LeftChecked0, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></CheckBox>
<TextBox Grid.Column="1" Width="100" Margin="10,0,10,10" Text="{Binding LeftValue0, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<CheckBox Grid.Column="2" Margin="15,2.5,5,0" IsChecked="{Binding RightChecked0, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></CheckBox>
<TextBox Grid.Column="3" Width="100" Margin="10,0,10,10" Text="{Binding RightValue0, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<CheckBox Grid.Column="0" Grid.Row="1" Margin="5,2.5,5,0" ></CheckBox>
<TextBox Grid.Column="1" Grid.Row="1" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="2" Grid.Row="1" Margin="15,2.5,5,0"></CheckBox>
<TextBox Grid.Column="3" Grid.Row="1" Width="100" Margin="10,0,10,10"></TextBox>
<Label Content="Degree" Grid.Row="2"/>
<CheckBox Grid.Column="0" Grid.Row="3" Margin="5,2.5,5,0" ></CheckBox>
<TextBox Grid.Column="1" Grid.Row="3" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="2" Grid.Row="3" Margin="15,2.5,5,0"></CheckBox>
<TextBox Grid.Column="3" Grid.Row="3" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="0" Grid.Row="4" Margin="5,2.5,5,0" ></CheckBox>
<TextBox Grid.Column="1" Grid.Row="4" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="2" Grid.Row="4" Margin="15,2.5,5,0"></CheckBox>
<TextBox Grid.Column="3" Grid.Row="4" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="0" Grid.Row="5" Margin="5,2.5,5,0" ></CheckBox>
<TextBox Grid.Column="1" Grid.Row="5" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="2" Grid.Row="5" Margin="15,2.5,5,0"></CheckBox>
<TextBox Grid.Column="3" Grid.Row="5" Width="100" Margin="10,0,10,10"></TextBox>
<Label Content="Iteration" Grid.Row="6"/>
<CheckBox Grid.Column="0" Grid.Row="7" Margin="5,2.5,5,0" ></CheckBox>
<TextBox Grid.Column="1" Grid.Row="7" Width="100" Margin="10,0,10,10"></TextBox>
<CheckBox Grid.Column="2" Grid.Row="7" Margin="15,2.5,5,0"></CheckBox>
<TextBox Grid.Column="3" Grid.Row="7" Width="100" Margin="10,0,10,10"></TextBox>
</Grid>
моя родительская модель представления
public class ControlVM : ViewModelBase
{
private bool leftChecked0;
public bool LeftChecked0
{
get { return leftChecked0; }
set
{
leftChecked0 = value;
this.OnPropertyChanged();
}
}
private bool rightChecked0;
public bool RightChecked0
{
get { return rightChecked0; }
set
{
rightChecked0 = value;
this.OnPropertyChanged();
}
}
private string leftValue0;
public string LeftValue0
{
get { return leftValue0; }
set
{
leftValue0 = value;
this.OnPropertyChanged();
}
}
private string rightValue0;
public string RightValue0
{
get { return rightValue0; }
set
{
rightValue0 = value;
this.OnPropertyChanged();
}
}
}
Как и в приведенном выше примере кода viewmodel
, я должен создать properties
и fields
для всех остальных 10 строк.
Я думал добавить его как элементшаблон в itemtemplate
контроле.но это не подходит для моей проблемы, так как иногда требуется добавлять другие элементы управления между каждой строкой этих четырех controls
.
если есть способ обернуть четыре controls
в usercontrol
и назвать его одной строкой в xaml?В таком случае, каким должен быть мой viewmodel
?и как работает связывание между родителем viewmodel
и потомком usercontrols
?
Я собираюсь упростить задачу, а не определять многократные повторяющиеся строки с одинаковыми controls
и properties
.