2010-09-01 6 views
0

Dans VS 2010/.NET 4.0, j'ai une liste List<MyClass> d'une simple classe en tant que telle:DataGrid WPF sélection désactivée

public class MyClass 
{   
    public string String1 { get; set; } 
    public string String2 { get; set; } 

    public MyClass(string string1, string string2) 
    { 
     String1 = string1; 
     String2 = string2; 
    } 
} 

Cette liste est affichée dans une WPF DataGrid dans le code derrière:

Les colonnes sont ajoutées d'abord:

List<DataGridColumn> cols = ParentClass.GetColumns(); 
foreach (DataGridColumn dgc in cols) 
{ 
    myDataGrid.Columns.Add(dgc); 
} 

source d'élément est défini suivant:

myDataGrid.ItemsSource = ParentClass.MyClassess; 

MyClassess est la liste

Cela fonctionne bien dans un sens que la DG se peuplé, mais il est impossible de sélectionner une ligne dans la DataGrid et DataGrid.SelectedItem retourne toujours null. Le DataGrid enregistre les événements de souris mais où jamais le clic se produit aucune ligne se comme si le sélectionné DataGrid est désactivé ...

SelectionMode="Single" 
SelectionUnit="FullRow" 
IsReadOnly="False" 

Est-ce que quelqu'un a une idée ce qui se passe ici?

TIA

Voici le XAML comme demandé:

<TabItem Header="Sessions" GotFocus="TabSessionsGotFocus"> 
        <Grid> 
         <Grid.RowDefinitions>        
          <RowDefinition Height="*"></RowDefinition>        
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition></ColumnDefinition> 
          <ColumnDefinition></ColumnDefinition> 
          <ColumnDefinition></ColumnDefinition> 
         </Grid.ColumnDefinitions> 

         <DockPanel Grid.Row="0" Grid.ColumnSpan="3" Margin="0"> 
          <DataGrid x:Name="dgSessions" DockPanel.Dock="Top" IsEnabled="True" AutoGenerateColumns="False" 
           SelectionMode="Single" SelectionUnit="FullRow" Background="WhiteSmoke" 
           AlternatingRowBackground="Gainsboro" GridLinesVisibility="None" IsReadOnly="False" 
           ColumnHeaderHeight="25" RowHeight="21" MouseRightButtonDown="SessionsRightButtonDown" > 
           <DataGrid.ContextMenu> 
            <ContextMenu x:Name="cmSessions"> 
             <MenuItem x:Name="miSessionActions"> 
              Action 
             </MenuItem>           
            </ContextMenu> 
           </DataGrid.ContextMenu> 
          </DataGrid> 
         </DockPanel> 
        </Grid> 
       </TabItem> 
+0

Étant donné les informations ci-dessus, le DataGrid devrait fonctionner correctement (je l'ai essayé). Une autre chose est très probablement à l'origine de cela. Pouvez-vous poster votre XAML? – ASanch

+0

Vu votre XAML. Je l'ai essayé en utilisant la pâte de copie directe et cela fonctionne toujours bien. http://i.imgur.com/ItS6V.png. Si vous passez la souris sur les en-têtes de colonne, obtenez-vous une réponse? Un couple de choses: 1) peut-être que quelque chose d'autre est en train de désactiver la grille? ou 2) quelque chose de transparent est sur le dessus de la grille? Je suis cependant certain que cela n'a rien à voir avec l'initialisation de la grille. – ASanch

+0

Existe-t-il des styles ou ControlTemplate (avec x: Key = "{x: Type DataGrid}") pour les DataGrids définis dans votre application? Ensuite, vous devrez ajouter ceci à votre question. –

Répondre

0

Le problème était que je chargeais le DataGrid quand il est événement parent Tab GotFocus a tiré et cet événement tirais chaque fois que le DataGrid a été cliquée sur.