WPF DataGrid ItemsSource Problème
S'il vous plaît laissez l'on sache que je suis relativement nouveau à WPF. Je suis entrain de créer un nouveau ObservableCollection
avec le type de ma classe de données, et que l'attribution de la ItemsSource
propriété de mon DataGrid
. Avant de m'en aller dans mon problème voici le code:
XAML:
<my:DataGrid SelectionMode="Single" SelectionUnit="Cell" Height="113" HorizontalAlignment="Left" Margin="11,22,0,0" Name="addressGrid" VerticalAlignment="Top" Width="213" Background="#FFE2E2E2" AlternatingRowBackground="#FFA4CFF2" BorderBrush="#FF7C7C7C" HorizontalGridLinesBrush="White" PreviewKeyDown="addressGrid_PreviewKeyDown" CellEditEnding="addressGrid_CellEditEnding" BeginningEdit="addressGrid_BeginningEdit" PreparingCellForEdit="addressGrid_PreparingCellForEdit">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=Name}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Value" Width="3*" Binding="{Binding Path=Value}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Index" Visibility="Hidden" Binding="{Binding Path=Index}"></my:DataGridTextColumn>
</my:DataGrid.Columns>
</my:DataGrid>
Classe De Données:
public class PropertyFields
{
public string Name { get; set; }
public object Value { get; set; }
public int Index { get; set; }
}
Population:
ObservableCollection<PropertyFields> propertyList = new ObservableCollection<PropertyFields>();
for (int i = 0; i < m_pFields.FieldCount - 1; ++i)
{
propertyList.Add(new PropertyFields() {Name = m_pFields.Field[i].AliasName, Value = DisplayedValueForRow(i), Index = i});
}
//Set ItemSource to populate grid
addressGrid.ItemsSource = propertyList;
Plus d'informations concernant la population de la méthode:
Je suis la construction de cette solution avec ArcGIS cadre, de sorte que certaines choses ne sont pas de "Système" dans les moyens.
-
m_pFields
est unIFields
objet de l'interface qui me permet de stocker spatiale de la couche d'information -
IFields
a unFieldCount
propriété qui retourne un nombre de champs dans la collection -
DisplayedValueForRow(i)
appelle une autre ArcGIS obj méthodeIPropertySet.GetProperty()
et renvoie la valeur.
Le Problème:
Tout est renseigné comme il se doit, mais pour une raison étrange, il est re-création de les trois colonnes (Nom, la Valeur de l'Indice) de nouveau SUR le DESSUS de remplissage de celles créées dans le code XAML -- À son tour de se retrouver avec 2 ensembles de données. J'ai trouvé ceci pour être le comportement bizarre, comme je vous jure, j'ai vu des gens se lient à leur grille de cette façon avant.
Ce que je fais mal?
Modifier
Grâce à ChrisO du commentaire, j'ai trouvé qu'il y est une propriété appelée "AutoGenerateColumns" qui devait être éteint. Eh bien je me sens comme un talon. Merci!
- C'est à partir de la mémoire mais ne, vous devez définir le AutoGenerateColumns=false sur le contrôle DataGrid?
- Si vous pouviez changer cela, pour répondre, je vais vous le donner. Merci de me laisser savoir à propos de cette propriété!
- Heureux, il a aidé. J'ai créé une réponse pour vous d'accepter. Merci!
Vous devez vous connecter pour publier un commentaire.
Il suffit de régler le
AutoGenerateColumns
valeur false à la propriété sur votreDataGrid
. Puis il utilisera uniquement les colonnes que vous avez spécifié.Suffit de définir sa
AutoGenerateColumns
àFalse
. Par défaut, il estTrue
.Si vous voulez afficher tous les domaines de votre classe. ne définissez pas toutes les colonnes dans le code XAML.
Mais si vous voulez afficher les étiquettes de colonnes, puis définissez
AutoGenerateColumns
de faux et d'écrire des colonnes individuelles dans le code XAML.