locked
binding xml RRS feed

  • Question

  • Salut a toutes et a tous,
    Petite question de Binding sur un xml....
    Donc, j'ai un xml (en local) dont je binde les balises <titre>.
    Pas de soucis jusque la.
    Comment faire afin que quand on fait un click sur un des titre binder, cela ouvre une page dynamique avec tout les sous éléments du titre sélectionner?
    J'ai bien une methode mais cela m'oblige a rentrer chaque titre dans le cs sans pouvoir binder.
    Est ce plus simple de séparer chaque titre dans un xml distinct plutôt qu'avoir tout en tas dans un seul xml?
    Et niveau performance, cela vaut il mieux, ca, au final, mon xml risque d'etre conséquent?
    Merci de vos avis éclairer :)

    Patrice

    vendredi 18 janvier 2013 09:49

Réponses

  • Bonjour Patrice,

    Pour répondre a votre première question, tout dépend du type de control sur lequel vous venez faire votre binding. Disons que dans le cas d'un Label par exemple, vous pouvez créer un event MouseLeftButtonDown qui va capturer l'action utilisateur puis dans le Handler récupérer le Label et ses attributs comme ceci :


            private void label1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Label myClickedLabel = sender as Label;
                MessageBox.Show("Vous avez cliquez sur le label : " + myClickedLabel.Name);
            }


    Dans cet exemple je récupère la propriété Name mais on peut également imaginer récupérer le Tag ou encore Content. Admettons que la propriété Content contienne le <titre> écrit dans votre XML, dans ce cas vous pouvez instancier une nouvelle page (WPF par exemple) en passant comme paramètre le <titre> qui a été sélectionné. Une fois dans la nouvelle page et en possession du titre, vous pouvez faire un traitement rapide sur une représentation XML pour y récupérer les données correspondantes.


    MainPage.cs
    
            private void label1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Label myClickedLabel = sender as Label;
                var dynamicPage = new myDetailedPage(myClickedLabel.Content.ToString());
                dynamicPage.Show();
            }

       
    MyDetailPage.cs
     
        /// <summary>
        /// Logique d'interaction pour MyDetailedPage.xaml
        /// </summary>
        public partial class MyDetailedPage : Page
        {
            private string _titre;
            public MyDetailedPage(string titre)
            {
                InitializeComponent();
                _titre = titre;
    
                //Appel d'une fonction de traitement xml pour récupérer les données liées à _titre
            }
        }



    Avec cela, vous devriez pouvoir, suite à un clique, récupérer le titre sélectionné puis afficher une page dynamique dans laquelle vous pourrez rechercher et afficher les données correspondante à ce clic.



    Au niveau performance par rapport a votre fichier XML, vous pouvez garder un fichier unique pour stocker vos données. A moins que vous y stockiez plusieurs milliers de titres avec pour chacun une 100 d'éléments, vous ne devriez pas avoir de problème de performance. Du moins je n'ai pas encore été confronté à ce problème.
    J'espère avoir pu vous aider, bon courage.




    • Modifié William HARY vendredi 18 janvier 2013 10:50
    • Marqué comme réponse pbaranx vendredi 18 janvier 2013 10:58
    vendredi 18 janvier 2013 10:42

Toutes les réponses

  • Bonjour Patrice,

    Pour répondre a votre première question, tout dépend du type de control sur lequel vous venez faire votre binding. Disons que dans le cas d'un Label par exemple, vous pouvez créer un event MouseLeftButtonDown qui va capturer l'action utilisateur puis dans le Handler récupérer le Label et ses attributs comme ceci :


            private void label1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Label myClickedLabel = sender as Label;
                MessageBox.Show("Vous avez cliquez sur le label : " + myClickedLabel.Name);
            }


    Dans cet exemple je récupère la propriété Name mais on peut également imaginer récupérer le Tag ou encore Content. Admettons que la propriété Content contienne le <titre> écrit dans votre XML, dans ce cas vous pouvez instancier une nouvelle page (WPF par exemple) en passant comme paramètre le <titre> qui a été sélectionné. Une fois dans la nouvelle page et en possession du titre, vous pouvez faire un traitement rapide sur une représentation XML pour y récupérer les données correspondantes.


    MainPage.cs
    
            private void label1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Label myClickedLabel = sender as Label;
                var dynamicPage = new myDetailedPage(myClickedLabel.Content.ToString());
                dynamicPage.Show();
            }

       
    MyDetailPage.cs
     
        /// <summary>
        /// Logique d'interaction pour MyDetailedPage.xaml
        /// </summary>
        public partial class MyDetailedPage : Page
        {
            private string _titre;
            public MyDetailedPage(string titre)
            {
                InitializeComponent();
                _titre = titre;
    
                //Appel d'une fonction de traitement xml pour récupérer les données liées à _titre
            }
        }



    Avec cela, vous devriez pouvoir, suite à un clique, récupérer le titre sélectionné puis afficher une page dynamique dans laquelle vous pourrez rechercher et afficher les données correspondante à ce clic.



    Au niveau performance par rapport a votre fichier XML, vous pouvez garder un fichier unique pour stocker vos données. A moins que vous y stockiez plusieurs milliers de titres avec pour chacun une 100 d'éléments, vous ne devriez pas avoir de problème de performance. Du moins je n'ai pas encore été confronté à ce problème.
    J'espère avoir pu vous aider, bon courage.




    • Modifié William HARY vendredi 18 janvier 2013 10:50
    • Marqué comme réponse pbaranx vendredi 18 janvier 2013 10:58
    vendredi 18 janvier 2013 10:42
  • Merci beaucoup William :)

    vendredi 18 janvier 2013 10:58
  • Pas de soucis, content d'avoir pu vous aider :D
    vendredi 18 janvier 2013 11:00