Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

27 mars 2014 4 27 /03 /mars /2014 20:13

Exemple : la ComboBox affiche une liste de catégories, la catégorie sélectionnée correspond à celle de l’article

 

1-Une ComboBox « classique »
que l’on pourrait retouver dans une vue détails .
  • ItemsSource : ce  doit être un énumérable (exemple une observableCollection AllCategories)
  • DisplayMemberPath : la valeur affichée(exemple : CategoryName de AllCategories)
  • SelectedValuePath : la valeur « cachée » dans la source (exemple CategoryID de AllCategories)
  • SelectedValue : la valeur à sélectionner de l’objet (exemple CategoryID de CurrentArticle)
  • SelectedItem : l’objet qui sera mis à jour en cas de modification à partir de l’UI ou par code) (important, exemple si la source est une ObservableCollection<Category> ,alors il faut donner un SelectedItem de type « Category »)
      <ComboBox    ItemsSource="{Binding AllCategories}"
                   SelectedValuePath="CategoryID"
                   DisplayMemberPath="CategoryName"
                   SelectedValue="{Binding CurrentArticle.Category.CategoryID}"
                   SelectedItem="{Binding CurrentArticle.Category}"
                   />

 

2-Une ComboBox dans un Datagrid définie avec un Template
(ici Avec DataGridTemplateColumn)  
   <DataGrid      ItemsSource="{Binding Articles}"
                  SelectedItem="{Binding CurrentArticle,Converter={StaticResource ignoreNewItemPlaceHolderConverter}}"
                  AutoGenerateColumns="False">
 
            <DataGrid.Resources>
                <DataTemplate x:Key="combo" >
                    <Border>
                        <ComboBox       ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.AllCategories}"
                                        SelectedValuePath="CategoryID"
                                        DisplayMemberPath="CategoryName"
                                        SelectedValue="{Binding Category.CategoryID}"
                                        SelectedItem="{Binding Category,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                        SelectionChanged="ComboBox_SelectionChanged"
                                        />
                    </Border>
                </DataTemplate>
            </DataGrid.Resources>
 
            <DataGrid.Columns>
                <!— colonnes classiques -->
                <DataGridTextColumn Header="Nom"  Binding="{Binding ArticleName,UpdateSourceTrigger=PropertyChanged}" Width="SizeToCells" />
                <DataGridTextColumn Header="Description"  Binding="{Binding Description,UpdateSourceTrigger=PropertyChanged}" Width="SizeToCells"/>
                <DataGridTextColumn Header="Prix"  Binding="{Binding UnitPrice, StringFormat=\{0:C\},UpdateSourceTrigger=PropertyChanged}" Width="SizeToCells"/>
                <!— Utilisation DataGridTemplateColumn -->
                <DataGridTemplateColumn CellTemplate="{StaticResource combo}" />
            </DataGrid.Columns>
        </DataGrid>

 

    Il est également possible de récupérer dans le code-behind l’élément sélectionné(SelectedItem)  
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // Définir la catégorie de l'élément par code au changement dans le datagrid
            Category category = ((ComboBox)sender).SelectedItem as Category;                         
                  context.CurrentArticle.Category = category;
 
        }

 

3-DataGridComboBoxColum
On définit la source de données pour l’état « en édition » et l’état normal
Important car sinon tout simplement vous vous retrouverez avec une liste vide.
<DataGrid         ItemsSource="{Binding Articles}"
                  SelectedItem="{Binding CurrentArticle}"
                  AutoGenerateColumns="False">
 
                <DataGridComboBoxColumn Header="Catégorie"
                                        SelectedValuePath="CategoryID"
                                        DisplayMemberPath="CategoryName"
                                        SelectedValueBinding="{Binding Category.CategoryID}"
                                        SelectedItemBinding="{Binding Category,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                        Width="SizeToCells">
 
                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.AllCategories}" />
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>
 
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.AllCategories}" />
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>
            </DataGrid.Columns>
        </DataGrid>

 

 

Partager cet article

Repost 0
Published by Romagny13 - dans Xaml
commenter cet article

commentaires

sizy458 02/03/2017 11:05

Code CS absent partiellement,
donc aucun interet !