bonjour
Je reviens une nouvelle fois vers vous pour une question que je n'arrive pas à résoudre tout seul
J'aimerais construire un treeview en fonction des enregistrements que je fais
mon XML :
Mon Model :
Code : 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 <?xml version="1.0" encoding="utf-8" standalone="yes"?> <Enregistrements> <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="A" Etage="RdC" Local="C" Y="0,8" K="1" VitessePlb="1,5"> <aps Id="1" Profil="Standard" Nom="WC avec reservoir" DebitUnitaire="0.12" CoefficientAPSIndividuel="0.5" EF="true" EC="false" /> <aps Id="2" Profil="Standard" Nom="Urinoir avec robinet individuel" DebitUnitaire="0.15" CoefficientAPSIndividuel="0.5" EF="true" EC="false" /> <aps Id="3" Profil="Standard" Nom="Urinoir à action siphonique" DebitUnitaire="0.5" CoefficientAPSIndividuel="1" EF="true" EC="false" /> <aps Id="4" Profil="Standard" Nom="Lavabo collectif" DebitUnitaire="0.05" CoefficientAPSIndividuel="0.5" EF="true" EC="true" /> <aps Id="5" Profil="Standard" Nom="Lavabo / Vasque" DebitUnitaire="0.2" CoefficientAPSIndividuel="1.5" EF="true" EC="true" /> <aps Id="6" Profil="Standard" Nom="Lave mains" DebitUnitaire="0.1" CoefficientAPSIndividuel="0.5" EF="true" EC="true" /> <aps Id="7" Profil="Standard" Nom="Douche" DebitUnitaire="0.2" CoefficientAPSIndividuel="2" EF="true" EC="true" /> <aps Id="8" Profil="Standard" Nom="Baignoire" DebitUnitaire="0.2" CoefficientAPSIndividuel="3" EF="true" EC="true" /> <aps Id="9" Profil="Standard" Nom="Evier" DebitUnitaire="0.2" CoefficientAPSIndividuel="2.5" EF="true" EC="true" /> <aps Id="10" Profil="Standard" Nom="Lave vaiselle" DebitUnitaire="0.1" CoefficientAPSIndividuel="1" EF="true" EC="false" /> <aps Id="11" Profil="Standard" Nom="Lave linge" DebitUnitaire="0.2" CoefficientAPSIndividuel="1" EF="true" EC="false" /> <aps Id="12" Profil="Standard" Nom="Robinet de puisage" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="false" /> <aps Id="13" Profil="Standard" Nom="Bouche incongelable" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="false" /> <aps Id="14" Profil="Standard" Nom="Vidoir / Poste d'eau" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="true" /> <aps Id="15" Profil="Standard" Nom="Autre" DebitUnitaire="0" CoefficientAPSIndividuel="0" EF="false" EC="false" /> </Enregistrement> <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="B" Etage="RdC" Local="rerre" Y="0,8" K="1" VitessePlb="1,5"> <aps Id="1" Profil="Standard" Nom="WC avec reservoir" DebitUnitaire="0.12" CoefficientAPSIndividuel="0.5" EF="true" EC="false" Quantite="10" /> <aps Id="2" Profil="Standard" Nom="Urinoir avec robinet individuel" DebitUnitaire="0.15" CoefficientAPSIndividuel="0.5" EF="true" EC="false" Quantite="0" /> <aps Id="3" Profil="Standard" Nom="Urinoir à action siphonique" DebitUnitaire="0.5" CoefficientAPSIndividuel="1" EF="true" EC="false" Quantite="0" /> <aps Id="4" Profil="Standard" Nom="Lavabo collectif" DebitUnitaire="0.05" CoefficientAPSIndividuel="0.5" EF="true" EC="true" Quantite="0" /> <aps Id="5" Profil="Standard" Nom="Lavabo / Vasque" DebitUnitaire="0.2" CoefficientAPSIndividuel="1.5" EF="true" EC="true" Quantite="0" /> <aps Id="6" Profil="Standard" Nom="Lave mains" DebitUnitaire="0.1" CoefficientAPSIndividuel="0.5" EF="true" EC="true" Quantite="0" /> <aps Id="7" Profil="Standard" Nom="Douche" DebitUnitaire="0.2" CoefficientAPSIndividuel="2" EF="true" EC="true" Quantite="0" /> <aps Id="8" Profil="Standard" Nom="Baignoire" DebitUnitaire="0.2" CoefficientAPSIndividuel="3" EF="true" EC="true" Quantite="0" /> <aps Id="9" Profil="Standard" Nom="Evier" DebitUnitaire="0.2" CoefficientAPSIndividuel="2.5" EF="true" EC="true" Quantite="0" /> <aps Id="10" Profil="Standard" Nom="Lave vaiselle" DebitUnitaire="0.1" CoefficientAPSIndividuel="1" EF="true" EC="false" Quantite="0" /> <aps Id="11" Profil="Standard" Nom="Lave linge" DebitUnitaire="0.2" CoefficientAPSIndividuel="1" EF="true" EC="false" Quantite="0" /> <aps Id="12" Profil="Standard" Nom="Robinet de puisage" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="false" Quantite="0" /> <aps Id="13" Profil="Standard" Nom="Bouche incongelable" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="false" Quantite="0" /> <aps Id="14" Profil="Standard" Nom="Vidoir / Poste d'eau" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="true" Quantite="0" /> <aps Id="15" Profil="Standard" Nom="Autre" DebitUnitaire="0" CoefficientAPSIndividuel="0" EF="false" EC="false" Quantite="0" /> </Enregistrement> <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="B" Etage="R+1" Y="0,8" K="1" VitessePlb="1,5"> <aps Id="1" Profil="Standard" Nom="WC avec reservoir" DebitUnitaire="0.12" CoefficientAPSIndividuel="0.5" EF="true" EC="false" Quantite="10" /> <aps Id="2" Profil="Standard" Nom="Urinoir avec robinet individuel" DebitUnitaire="0.15" CoefficientAPSIndividuel="0.5" EF="true" EC="false" Quantite="0" /> <aps Id="3" Profil="Standard" Nom="Urinoir à action siphonique" DebitUnitaire="0.5" CoefficientAPSIndividuel="1" EF="true" EC="false" Quantite="0" /> <aps Id="4" Profil="Standard" Nom="Lavabo collectif" DebitUnitaire="0.05" CoefficientAPSIndividuel="0.5" EF="true" EC="true" Quantite="0" /> <aps Id="5" Profil="Standard" Nom="Lavabo / Vasque" DebitUnitaire="0.2" CoefficientAPSIndividuel="1.5" EF="true" EC="true" Quantite="0" /> <aps Id="6" Profil="Standard" Nom="Lave mains" DebitUnitaire="0.1" CoefficientAPSIndividuel="0.5" EF="true" EC="true" Quantite="0" /> <aps Id="7" Profil="Standard" Nom="Douche" DebitUnitaire="0.2" CoefficientAPSIndividuel="2" EF="true" EC="true" Quantite="0" /> <aps Id="8" Profil="Standard" Nom="Baignoire" DebitUnitaire="0.2" CoefficientAPSIndividuel="3" EF="true" EC="true" Quantite="0" /> <aps Id="9" Profil="Standard" Nom="Evier" DebitUnitaire="0.2" CoefficientAPSIndividuel="2.5" EF="true" EC="true" Quantite="0" /> <aps Id="10" Profil="Standard" Nom="Lave vaiselle" DebitUnitaire="0.1" CoefficientAPSIndividuel="1" EF="true" EC="false" Quantite="0" /> <aps Id="11" Profil="Standard" Nom="Lave linge" DebitUnitaire="0.2" CoefficientAPSIndividuel="1" EF="true" EC="false" Quantite="0" /> <aps Id="12" Profil="Standard" Nom="Robinet de puisage" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="false" Quantite="0" /> <aps Id="13" Profil="Standard" Nom="Bouche incongelable" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="false" Quantite="0" /> <aps Id="14" Profil="Standard" Nom="Vidoir / Poste d'eau" DebitUnitaire="0.33" CoefficientAPSIndividuel="2" EF="true" EC="true" Quantite="0" /> <aps Id="15" Profil="Standard" Nom="Autre" DebitUnitaire="0" CoefficientAPSIndividuel="0" EF="false" EC="false" Quantite="0" /> <apschasse Id="25" Profil="Standard" Nom="WC avec robinet de chasse" DebitUnitaire="1.5" EF="true" QuantiteChasse="0" /> <apschasse Id="26" Profil="Standard" Nom="Autre avec robinet de chasse" DebitUnitaire="0" EF="true" QuantiteChasse="0" /> </Enregistrement> </Enregistrements>
mon DataAccess
Code : 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 using System; using System.ComponentModel; using System.Diagnostics; using System.Text.RegularExpressions; using Apeiron.Properties; using System.Xml.Serialization; using System.Collections.ObjectModel; namespace Apeiron.Model { [XmlRoot] [Serializable] public class Enregistrement // Save Sanitary devices { [XmlAttribute] public string TypeEnregistrement { get; set; } [XmlAttribute] public string Batiment { get; set; } [XmlAttribute] public string Etage { get; set; } [XmlAttribute] public string Local { get; set; } [XmlAttribute] public string Y { get; set; } [XmlAttribute] public string K { get; set; } [XmlAttribute] public string VitessePlb { get; set; } [XmlElement] public Collection<APS> aps { get; set; } [XmlElement] public Collection<APSCHASSE> apschasse { get; set; } } }
Par contre je commence à coincer au niveau de mon ViewModel et de ma View
Code : 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 namespace Apeiron.DataAccess { class EnregistrementXmlProvider : IDataEnregistrement<Enregistrement> { private readonly XDocument doc; private readonly string xmlFilePath; public EnregistrementXmlProvider(string xmlFilePath) { this.xmlFilePath = xmlFilePath; doc = XDocument.Load(xmlFilePath); } public void Add(Enregistrement entity) { var element = entity.ToXElement<Enregistrement>(); doc.Root.Add(element); doc.Save(xmlFilePath); } public IEnumerable<string> GetBatiment() { return doc.Descendants("Enregistrement").Where(s => s.Attribute("TypeEnregistrement").Value == "APS").Select(s => s.Attribute("Batiment").Value).Distinct(); } public IEnumerable<Enregistrement> GetAll() { return doc.Descendants("Enregistrement").Select(element => element.FromXElement<Enregistrement>()); } } }
Mon ViewModel
Code : 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 public void SaveLocal() { var NouvelEnregistrement = new Enregistrement { TypeEnregistrement = "APS", Batiment = Batiment, Etage = Etage, Local = Local, Y = Y.ToString(), K = K.ToString(), VitessePlb = VitessePlb.ToString(), aps = Aps, apschasse = ApsChasse }; EnregistrementProvider.Add(NouvelEnregistrement); var getallenregistrement = EnregistrementProvider.GetAll(); Enregistrement = new ObservableCollection<Enregistrement>(getallenregistrement); var getallenregistrement = EnregistrementProvider.GetAll(); ListBatiment = Enregistrement.Where(s => s.TypeEnregistrement == "APS").Select(s => s.Batiment).Distinct().ToList();
mon treeview voulu :
Le nom des bâtiments en distinct()
Les etages en fonction du nom des bâtiments en distinct()
et les nom des locaux
> Batiment A
>RdC
> Nom Local 1
> nom et quantité aps & apschasse en fonction que quantité <> 0
> Etc (s'il existe)
>Etc (s'il existe)
> Batiment B
> RdC
> Nom Local 1
> Nom Local 2
> Etc (s'il existe)
> R+1
> Nom Local 1
> Nom Local 2
> Etc (s'il existe)
>Etc (s'il existe)
J'ai trouvé cela sur internet : https://www.codeproject.com/articles...g-the-viewmode
Cela correspondrait plutôt pas mal à ce que je voudrais faire mais je ne sais pas trop comment adapter les différentes classes par rapport à ma classe ENREGISTREMENT.
Pouvez vous m'aider s'il vous plait.
En vous remerciant par avance
Partager