2017-04-25 5 views
0

J'ai une zone de liste déroulante dans un RowdetailsTemplate dans un Datagrid. Si je change les colonnes, alors change automatiquement la valeur dans la colonne Datagrid avec la valeur avant sélectionnée. La valeur dans la colonne DataGrid ne devrait changer si la valeur dans la liste déroulante sont modifiésCombobox dans RowDetailTemplate mise à jour tous les colonnes avant sélectionnées

public class BMFill 
{ 
    public BMFill() 
    { 
     colCBArt.Add(new CBArt { Name = "test" , Nr = 0 }); 
     colCBArt.Add(new CBArt { Name = "hallo", Nr = 1 }); 
     colCBArt.Add(new CBArt { Name = "welt", Nr = 2 }); 
     colCBArt.Add(new CBArt { Name = "blubb", Nr = 3 }); 
     colCBArt.Add(new CBArt { Name = "lalalala", Nr = 4 }); 

    } 
    List<CBArt> colCBArt = new List<CBArt>(); 
    CollectionViewSource cvsCBArt = null; 


    public ICollectionView ViewCBArt 
    { 
     get 
     { 
      if (cvsCBArt == null) cvsCBArt = new CollectionViewSource() { Source = colCBArt }; 
      return cvsCBArt.View; 
     } 
    } 


    public class CBArt 
    { 
     public string Name { get; set; } 
     public int Nr { get; set; } 
    } 
} 

<Window.Resources> 
    <local:BMFill x:Key="vm"/> 
</Window.Resources> 
<DataGrid x:Name="dg"> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1" 
            SelectedValuePath="Nr" 
            SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}" 
            DisplayMemberPath="Name" 
            ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}" 
            /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 

je l'espère, comprendre mon problème et peut me aider =)

Répondre

0
SelectedValuePath="Nr" 
            SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}" 
            DisplayMemberPath="Name" 
            ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}" 
            IsSynchronizedWithCurrentItem="False" 

ce travail Solution par moi

0

Vous pouvez essayer d'ajouter des gestionnaires d'événements pour DropDownOpened et Événements DropDownClosed, déclenchez un indicateur pendant l'ouverture de la liste déroulante et vérifiez si cet indicateur n'est pas déclenché lorsque vous modifiez la valeur dans la colonne Datagrid.

XAML:

 <ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1" 
           SelectedValuePath="Nr" 
           SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}" 
           DisplayMemberPath="Name" 
           ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}" 
           DropDownOpened="OnDropDownOpened" DropDownClosed="OnDropDownClosed" 
           /> 

C#:

private bool _comboxBoxIsOpened = false; 
    private void OnDropDownOpened(object sender, EventArgs e) 
    { 
     _comboxBoxIsOpened = true; 
    } 

    private void OnDropDownClosed(object sender, EventArgs e) 
    { 
     _comboxBoxIsOpened = false; 
    } 
+0

Mon problème est que je dois mettre à jour la colonne DataGrid en cas de changement de la valeur dans la zone de liste déroulante –

+0

@ ToniSchönberger ainsi vous pouvez enregistrer la valeur précédente sur Ouvert, et vérifier si elle a changé dans Closed (en utilisant global v ariable). Si oui, mettez à jour Datagrid Colum – ShugiShugi