Bonjour à tous,

J'ai un sacré souci sur lequel je tourne depuis pas mal de temps.

Soit un objet Article possédant un nom, un prénom, un dépôt.
Un dépôt est composé d'un id et d'un intitulé

Si j'affiche dans une combobox standard un observablecollection<Depot> et que je souhaite récupérer le dépôt courant en passant par le selecteditem, ça fonctionne sans problème.

Maintenant si j'effectue la même opération dans un datagrid, ça ne fonctionne absolument pas.

J'ai fais plusieurs test pour en arriver à ce résultat qui ne fonctionne pas :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
public class ArticleViewModel : ViewModelBase
{
 
        #region Members Fields
        private String m_Ref;
 
        private String m_Libelle;
 
        private ObservableCollection<Depot> m_ObservableDepot;
 
        private Depot m_CurrentDepot
        #endregion
 
        #region Properties
          public String Ref
        {
            get 
            { 
                return m_Ref; 
            }
            set 
            {
                this.m_Ref = value; 
                this.OnPropertyChanged("Ref"); 
            }
        }
 
        public String Libelle
        {
            get 
            { 
                return m_Libelle; 
            }
            set 
            {
                this.m_Libelle = value; 
                this.OnPropertyChanged("Libelle"); 
            }
        }
 
        public ObservableCollection<Depot> ObservableDepot
        {
            get
            {
                return this.m_ObservableDepot;
            }
            set
            {
                this.m_ObservableeDepot = value;
                this.OnPropertyChanged("ObservableDepot");
            }
        }
 
        public Depot CurrentDepot
        {
            get
            {
                return this.m_CurrentDepot;
            }
            set
            {
                this.m_CurrentDepot = value;
                this.OnPropertyChanged("CurrentDepot");
            }
        }
        #endregion
 
 
       #region Constructors
        public ArticleViewModel()
        {
              Model.Local.DepotRepository DepotRepository = new Model.Local.DepotRepository;
 
              this.ObservableDepot = DepotRepository.List();
         }
        #endregion
}

Maintenant dans ma view nommé SaisieView, j'ai :

Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<DataGrid RowHeight="30" ItemsSource="{Binding ObservableArticle}" SelectedItem="{Binding CurrentArticle}" Margin="8,8,8,40" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" SelectionMode="Single"  GridLinesVisibility="None" HeadersVisibility="Column">
					<DataGrid.Columns>
						<DataGridTextColumn Header="Ref" Width=".10*" Binding="{Binding Ref}" IsReadOnly="True" />
						<DataGridTextColumn Header="Libellé court" Width=".10*" Binding="{Binding Libelle}" IsReadOnly="True" />
						<DataGridTemplateColumn Header="Dépôt" Width=".10*" IsReadOnly="False">
							<DataGridTemplateColumn.CellTemplate >
								<DataTemplate>
									<ComboBox ItemsSource="{Binding ObservableDepot}" SelectedItem="{Binding CurrentDepot}" DisplayMemberPath="DE_Intitule"/>
								</DataTemplate>
							</DataGridTemplateColumn.CellTemplate>
						</DataGridTemplateColumn>
						<DataGridTemplateColumn Header="DateLivr" Width=".10*">
							<DataGridTemplateColumn.CellTemplate >
								<DataTemplate>
									<DatePicker SelectedDate="{Binding DateLivraison}"/>
								</DataTemplate>
							</DataGridTemplateColumn.CellTemplate>
						</DataGridTemplateColumn>
					</DataGrid.Columns>
				</DataGrid>

Et dans mon SaisieViewModel j'ai une ObservableCollection<Article> qui me récupère mes articles et les affiches dans mon datagrid (via ObservableArticle). Tout celà fonctionne bien, j'ai bien ma liste d'articles, je récupère bien le current article, j'ai ma liste de dépôt disponible dans ma combobox mais le selecteditem de ma combobox ne fonctionne pas.
J'ai lu sur le net qu'il y avait un problème et qu'une combobox dans un datagrid n'est pas identique à une combobox seule. La solution conseillé était que le selecteditem ne fonctionnait pas s'il était bindé sur un objet dans le cas d'une combobox dans un datagrid. J'ai donc essayé de l'associé à un Int, un String, mais rien n'y fait.

Je ne comprend tout simplement pas le problème ^^.

Merci d'avance à ceux qui se pencheront sur le sujet.