IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

GRID et MVVM: Cherche une piste svp


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut GRID et MVVM: Cherche une piste svp
    Bonjour, voici ma problématique:

    J'utilise MVVM et je veux afficher ds un objet de type GRID (? à voir), des données (EF+RIA ) du genre.... List<List<String>>. Par exemple:
    C1R1 |C2R1 |C3R1 |C4R1 |C5R1
    C1R2 |C2R2 |C3R2 |C4R2 |C5R2... mais je ne connais pas au départ le nb de colonnes....

    J'ai bien des idées: customControl, dependyProperty... mais je ne sais pas comment partir...
    - faut-t-il utiliser un GRID? et comment faire puisque ColumnDefinition ne propose pas de binding ...
    - un DataGrid ?....là je vois pas comment faire...
    Bref si quelqu'un a déja eu cette problématique ou une piste... merci d'avance

    PM

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Une méthode brute mais efficace est de générer des objets dynamiquement avec autant de propriétés que nécessaire.

    Une implémentation de ce principe : http://blog.bodurov.com/How-to-bind-...of-IDictionary

    Le problème principal reste bien sûr la maintenance d'un code aussi bas niveau.
    Donc à bien encapsuler dans la couche de données afin d'éviter tout couplage.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    Ok, merci pour cette 1ere approche. Mais j'aurais préféré une solution avec un binding directement en xaml...car ViewModel et pas de code dans le c# de ma View. -> et la solution n'est-ce pas de passer par un control personnalisé de type GRID avec des DependencyProperty ....?

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Si tu connais la taille exacte d'une colonne tu peux utiliser un WrapPanel en fixant La taille dynamiquement sur nombre de colonne * taille d'une colonne; Il arrangera les cellules tout seul et tu pourras utiliser le Binding en le couplant à un ItemsControl ou une ListBox.

    Sinon si tu veux absolument utiliser le Binding, tu ne pourras pas utiliser un Grid, mais rien ne t'empeche de créer ton propre Panel (plus adapté) ou un CustomControl à la rigueur (plus facile peut être).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    Merci.
    Effectivement, mon but est d'avoir un control dont la propriété column binde une valeur pour que celui-ci puisse redessiner dynamiquement son nombre de colonnes ...me suis-je bien fais comprendre .....

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Voici l'exemple dont je te parlais tout à l'heure

    coté XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ItemsControl ItemsSource="{Binding Table.Datas}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <controlsToolkit:WrapPanel ItemWidth="{Binding Table.ColumnWidth}" Width="{Binding Table.TableWidth}"></controlsToolkit:WrapPanel>
            </ItemsPanelTemplate>                
        </ItemsControl.ItemsPanel>                    
    </ItemsControl>

    coté CS :

    la structure des données :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    public class Table : INotifyPropertyChanged
    {
        public Table()
        {
            this.Datas = new ObservableCollection<string>();
        }
     
        public ObservableCollection<string> Datas
        {
            get;
            set;
        }
     
        public int ColumnsByRow
        {
            get
            {
                return this.columnsByRow;
            }
     
            set
            {
                this.columnsByRow = value;
                this.RaisePropertyChanged("ColumnsByRow");
                this.RaisePropertyChanged("TableWidth");
            }
        }
     
        private int columnsByRow = 4;
     
        /// <summary>
        /// Taille de la colonne
        /// </summary>
     
        public double ColumnWidth
        {
            get
            {
                return this.columnWidth;
            }
     
            set
            {
                this.columnWidth = value;
                this.RaisePropertyChanged("ColumnWidth");
                this.RaisePropertyChanged("TableWidth");
            }
        }
     
        private double columnWidth = 0;
     
     
        public double TableWidth
        {
            get
            {
                return this.ColumnWidth * this.ColumnsByRow;
            }
        }
     
        public event PropertyChangedEventHandler PropertyChanged;
     
        /// <summary>
        /// Raise
        /// </summary>
        /// <param name="propertyName"></param>
     
        protected void RaisePropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    la mise en place
    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
     
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            this.LayoutRoot.DataContext = this;
     
            Table table = new Table();
     
            // les données
     
            ObservableCollection<string> datas = new ObservableCollection<string>();
     
     
            datas.Add("Super 1");
            datas.Add("Super 2");
            datas.Add("Super 3");
            datas.Add("Super 4");
     
            table.Datas = datas;
     
            table.ColumnWidth = 100;
            table.ColumnsByRow = 3;
     
            this.Table = table;
        }
     
        public Table Table
        {
            get { return (Table)GetValue(TableProperty); }
            set { SetValue(TableProperty, value); }
        }
     
        // Using a DependencyProperty as the backing store for Table.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty TableProperty =
            DependencyProperty.Register("Table", typeof(Table), typeof(MainPage), new PropertyMetadata(null));
     
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    ok et merci....

    Malheureusement ce n'est pas tout a fait ce que je veux.
    Il me faut un composant de type GRID mais dont le nombre de colonne et de ligne dépendrait du résultat d'une List<List<String>>.

    Et même sans cela, ce composant doit pouvoir augmenter ou diminuer son nombre de colonne directement par binding sur une valeur d'un slider par exemple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. je cherche une sous chaine dans une chaine
    Par avprive dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2005, 01h48
  2. Je cherche une méthode de collision
    Par ptitbonum dans le forum Physique
    Réponses: 5
    Dernier message: 21/09/2004, 14h20
  3. modelisation d'une piste de ski
    Par djbed dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 28/06/2004, 16h03
  4. [Open tools] Je cherche une documentation complète
    Par fbeghini dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/11/2003, 09h23
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo