Bonjour,

J'ai crée une classe afin de pouvoir faire un datagrid bindé à ma convenance, avec exactement ce que je veux. Mais le soucis que j'ai, c'est le temps que ma classe se construise, le load de la page en cours est déjà fin. Ce qui fait que j'ai rien dans mon tableau.

Ps :Je me suis "amusé" à redemandé le binding apres quelques secondes sur un bouton, bien entendu là ça marche car il a fini de charger.

Je met ici le code de ma classe :

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
59
60
61
62
 public class Element
    {
        public String RoleName { get; set; }
        public bool InRole { get; set; }
 
        public Element(string RoleName, bool Check)
        {
            this.RoleName = RoleName;
            this.InRole = Check;
 
        }
 
    }
 
    public class DataGridRoleCheckBox
    {
 
        public RolesContext RoleC { get; set; }
        public RolesContext RoleD { get; set; }
        public List<Element> MesElements { get; set; }
        public EntitySet<RolesServiceUser> MesRoles { get; set; }
        public List<String> MesRoleUserName { get; set; }
 
        public DataGridRoleCheckBox(String Username)
        {
            MesRoleUserName = new List<string>();
            MesElements = new List<Element>();
            MesRoles = new EntitySet<RolesServiceUser>();
            RoleC = new RolesContext();
            RoleD = new RolesContext();
            RoleD.RolesServiceUsers.EntityAdded += new EventHandler<EntityCollectionChangedEventArgs<RolesServiceUser>>(RolesServiceUsers_EntityAdded);
            RoleD.Load(RoleD.GetRoleUserWithoutAdminQuery(Username)).Completed += new EventHandler(DataGridRoleCheckBox_Completed);
            RoleC.Load(RoleC.GetRoleWithoutAdminQuery()).Completed += new EventHandler(RoleCCompleted);
 
 
        }
 
        void RolesServiceUsers_EntityAdded(object sender, EntityCollectionChangedEventArgs<RolesServiceUser> e)
        {
            MesRoleUserName.Add(e.Entity.RoleName);
        }
 
        void DataGridRoleCheckBox_Completed(object sender, EventArgs e)
        {
            MesRoles = RoleD.RolesServiceUsers;
        }
 
 
        private void RoleCCompleted(object sender, EventArgs e)
        {
 
            EntitySet<RolesServiceUser> test = RoleC.RolesServiceUsers;
            foreach (RolesServiceUser item in test)
            {
                if (MesRoleUserName.Contains(item.RoleName))
                    MesElements.Add(new Element(item.RoleName, true));
                else
                    MesElements.Add(new Element(item.RoleName, false));
            }
 
        }
    }
et ici, la page qui l'appelle :

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
 public VuTtCompte()
        {
 
            InitializeComponent();
            worker = new BackgroundWorker();
            worker.WorkerReportsProgress = true;
            worker.DoWork += new DoWorkEventHandler(_worker_DoWork);
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_RunWorkerCompleted);
            worker.RunWorkerAsync();
        }
 
        void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
 
            this.DataContext = tt;
            mesElementsDataGrid.ItemsSource = tt.MesElements;
        }
 
        void _worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Dispatcher.BeginInvoke(() => tt = new DataGridRoleCheckBox("admin"));
        }

Si quelqu'un a la gentillesse de se pencher sur le problème