J'essaie d'obtenir un ItemsControl, qui contient une grille, pour afficher 9 cases à cocher avec des propriétés différentes. Cependant, seulement trois apparaissent.Certains éléments n'apparaissent pas dans ItemsControl via ItemsSource
J'ai une classe de modèle de case à cocher qui a quatre propriétés représentant le contenu des cases à cocher, les propriétés grid.row/column et isChecked. Je crée ensuite neuf d'entre eux dans mon viewmodel et les ajoute à un ObservableCollection
.
Ensuite, je lie la ItemsSource de mes ItemsControl à la collection. Ensuite, j'ajoute un contrôle checkbox à la grille à l'intérieur de ItemsControl et lie les propriétés appropriées.
Cependant, seules les trois premières cases à cocher s'affichent et je n'ai aucune idée pourquoi. J'ai vérifié par le biais du débogage que la collection liée contient le nombre correct d'éléments.
Voilà ma classe CheckboxModel:
public class CheckboxModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set { _isChecked = value; OnPropertyChanged("IsChecked"); }
}
private string _content;
public string Content
{
get { return _content; }
set { _content = value; OnPropertyChanged("Content"); }
}
private int _gridRow;
public int GridRow
{
get { return _gridRow; }
set { _gridRow = value; OnPropertyChanged("GridRow"); }
}
private int _gridColumn;
public int GridColumn
{
get { return _gridColumn; }
set { _gridColumn = value; OnPropertyChanged("GridColumn"); }
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Dans mon modèle de vue, je crée une collection de ces derniers:
private ObservableCollection<CheckboxModel> _checkBoxList = new ObservableCollection<CheckboxModel>();
public ObservableCollection<CheckboxModel> CheckBoxList
{
get
{
return _checkBoxList;
}
set
{
if (null != value)
{
_checkBoxList = value;
OnPropertyChanged("CheckBoxList");
}
}
}
public void CreateCheckboxList()
{
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Latitude", GridRow = 0, GridColumn = 0 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Longitude", GridRow = 1, GridColumn = 0 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Altitude", GridRow = 2, GridColumn = 0 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Depth", GridRow = 0, GridColumn = 1 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Speed", GridRow = 1, GridColumn = 1 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Heading", GridRow = 2, GridColumn = 1 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Roll", GridRow = 0, GridColumn = 2 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "Pitch", GridRow = 1, GridColumn = 2 });
CheckBoxList.Add(new CheckboxModel { IsChecked = true, Content = "VOS", GridRow = 2, GridColumn = 2 });
}
Et enfin voici mon XAML:
<ItemsControl ItemsSource="{Binding CheckBoxList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="149.6*" />
<ColumnDefinition Width="149.6*" />
<ColumnDefinition Width="149.6*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="28*" />
<RowDefinition Height="28*" />
<RowDefinition Height="28*" />
</Grid.RowDefinitions>
<CheckBox Grid.Row="{Binding GridRow}"
Grid.Column="{Binding GridColumn}"
Margin="14,6,63,6"
VerticalAlignment="Center"
Content="{Binding Content}"
IsChecked="{Binding IsChecked}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Voici à quoi il ressemble:
Voici ce que je veux ressembler:
Fonctionne parfaitement, merci! – pfinferno
@pdinferno 'UniformGrid' ferait un excellent travail en tant que panneau d'éléments pour celui-ci aussi. –