2010-08-25 9 views
1

J'ai une liste de noms que j'aimerais associer à une grille de données pour éditer/trier/etc. Mais, je n'aime pas comment le DataGrid est affiché du tout. Les colonnes sont placées dans l'ordre alphabétique quand je veux vraiment un ordre personnalisé (et je voudrais pouvoir cacher la colonne d'identification, ou rendre cette colonne non éditable). Je ne sais pas comment commencer à faire tout cela ...WPF: comment commencer à mettre en forme un DataGrid créé à l'aide de MVVM?

REMARQUE: j'ai enlevé beaucoup de code « commun » (ex: Code INotifyPropertyChanged ...)

//PersonModel.cs 
public class PersonModel 
{ 
    public Int32 ID { get; set; } 
    public String FirstName { get; set; } 
    public String LastName { get; set; } 
} 

//PersonViewModel.cs 
public class PersonViewModel 
{ 
    public PersonViewModel() 
    { 
     Init(); 
    } 
    public PersonViewModel(ObservableCollection<PersonModel> persons) 
    { 
     Init(person); 
    } 
    private void Init(ObservableCollection<PersonModel> persons = null) 
    { 
     Persons = person ?? new ObservableCollection<PersonModel>(); 
    } 

    public ObservableCollection<PersonModel> Persons { get; set; } 
} 

//PersonView.xaml 
<UserControl ... 

    ... 

    <DataGrid ItemsSource="{Binding Persons}" /> 

    ... 
</UserControl> 

Répondre

2

À moins que vous le dites sinon, le DataGrid infère les colonnes via la réflexion. Si vous voulez prendre le contrôle, vous pouvez:

<DataGrid ItemsSource="{Binding Persons}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/> 
     <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Je pense que vous devez également définir 'AutoGenerateColumns = FALSE' sur le DataGrid, sinon le DataGrid va générer les colonnes initiales en plus de ceux que vous specifify – Rachel

+0

+1 Je vous jure, vous et le Dr WPF êtes les Dieux WPF! J'aime particulièrement le pack Converter que vous avez sorti :) –

+1

Je vous assure: je suis mortel. Mais on ne peut nier l'omniscience du Dr WPF;) –