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 :

DataForm Template MVVM light


Sujet :

Silverlight

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 16
    Points
    16
    Par défaut DataForm Template MVVM light
    Bonjour, j'utilise le pattern MVVM (Toolkit de L.Brugnion) avec un ServiceLocator.
    J'ai un DataForm customisé (qui binde une liste de mon VM) et dans lequel une combo doit être remplie par une autre collection de VM ...
    Mon problème: ma combo n'est jamais remplie. Si vs avez une idée ?

    Un extrait de mon VM:
    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
     
            public List<string> Colors
            {
                get
                {
                    return _colors;
                }
                set
                {
                    if (_colors != value)
                    {
                        _colors = value;
                        RaisePropertyChanged("Colors");
                    }
                }
            }
     
            public NOTETHEME SelectedTheme
            {
                get
                {
                    return _selectedTheme;
                }
                set
                {
                    if (_selectedTheme != value)
                    {
                        _selectedTheme = value;
                        RaisePropertyChanged("SelectedTheme");
                    }
                }
            }
    Extrait du XAML:

    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
     
    ... DataContext="{Binding Source={StaticResource ServiceLocator}, Path=ThemesPageViewModel}"
     
    ...
                        <toolkit:DataForm  HorizontalAlignment="Stretch" 
                    		VerticalAlignment="Top" 
                    		CurrentItem="{Binding Path=SelectedTheme}" 
                    		FontFamily="Verdana" FontSize="13.333"
                            LabelPosition="Left" DescriptionViewerPosition="BesideContent" Height="162"
                            CommitButtonContent="Enregistrer" 
    						CancelButtonContent="Annuler" 
    						Header="Gestion des thèmes" 
    						AutoEdit="False" 
    						AutoCommit="False"
    						AutoGenerateFields="False"
    						CommandButtonsVisibility="All" 
    						CommitButtonStyle="{StaticResource ButtonChromeStyle}"
    						CancelButtonStyle="{StaticResource ButtonChromeStyle}">
                            <toolkit:DataForm.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#FFE8F3FC" Offset="0"/>
                                    <GradientStop Color="#FF9BCCEE" Offset="0.108"/>
                                </LinearGradientBrush>
                            </toolkit:DataForm.Background>
                            <toolkit:DataForm.EditTemplate>
                                <DataTemplate>
                                    <Grid >
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="28" />
                                            <RowDefinition Height="28" />
                                            <RowDefinition Height="28" />
                                        </Grid.RowDefinitions>
                                        <toolkit:DataField Grid.Row="0" Label="Nom du thème" Width="Auto">
                                            <TextBox Text="{Binding Mode=TwoWay, Path=THEME_NAME}" Style="{StaticResource TextBoxGlassyStyle}"/>
                                        </toolkit:DataField>
                                            <toolkit:DataField Grid.Row="1" Label="Couleur du Texte" Width="Auto">
                                            <ComboBox ItemsSource="{Binding Mode=OneWay, Path=Colors}" />
                                            </toolkit:DataField>
                                            <toolkit:DataField Grid.Row="2" Label="Couleur du fond" Width="Auto">
                                            <ComboBox ItemsSource="{Binding Mode=OneWay, Path=Colors}" />
                                            </toolkit:DataField>
                                    </Grid>
                                </DataTemplate>
                            </toolkit:DataForm.EditTemplate>
                        </toolkit:DataForm>
    Merci d'avance pour les réponses

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Pour utiliser {StaticResource ServiceLocator} il faut que celui soit déclaré comme ressource dans ton App.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <App.Ressources>
    	<ServiceLocator x:Key="ServiceLocator" d:IsDataSource="true" />
    </App.Ressources>

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Pour utiliser {StaticResource ServiceLocator} il faut que celui soit déclaré comme ressource dans ton App.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <App.Ressources>
    	<ServiceLocator x:Key="ServiceLocator" d:IsDataSource="true" />
    </App.Ressources>
    C'est le cas par défaut, avec les templates fournit dans le toolkit

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    C'est normal que ta ComboBox ne soit pas remplie car tu es dans un DataTemplate donc pas dans le même namescope.

    Essage ca:

    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
    DataContext="{Binding Source={StaticResource ServiceLocator}, Path=ThemesPageViewModel}"
     
    ...
                        <toolkit:DataForm x:Name="df" HorizontalAlignment="Stretch" 
                    		VerticalAlignment="Top" 
                    		CurrentItem="{Binding Path=SelectedTheme}" 
                    		FontFamily="Verdana" FontSize="13.333"
                            LabelPosition="Left" DescriptionViewerPosition="BesideContent" Height="162"
                            CommitButtonContent="Enregistrer" 
    						CancelButtonContent="Annuler" 
    						Header="Gestion des thèmes" 
    						AutoEdit="False" 
    						AutoCommit="False"
    						AutoGenerateFields="False"
    						CommandButtonsVisibility="All" 
    						CommitButtonStyle="{StaticResource ButtonChromeStyle}"
    						CancelButtonStyle="{StaticResource ButtonChromeStyle}">
                            <toolkit:DataForm.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#FFE8F3FC" Offset="0"/>
                                    <GradientStop Color="#FF9BCCEE" Offset="0.108"/>
                                </LinearGradientBrush>
                            </toolkit:DataForm.Background>
                            <toolkit:DataForm.EditTemplate>
                                <DataTemplate>
                                    <Grid >
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="28" />
                                            <RowDefinition Height="28" />
                                            <RowDefinition Height="28" />
                                        </Grid.RowDefinitions>
                                        <toolkit:DataField Grid.Row="0" Label="Nom du thème" Width="Auto">
                                            <TextBox Text="{Binding Mode=TwoWay, Path=THEME_NAME}" Style="{StaticResource TextBoxGlassyStyle}"/>
                                        </toolkit:DataField>
                                            <toolkit:DataField Grid.Row="1" Label="Couleur du Texte" Width="Auto">
                                            <ComboBox ItemsSource="{Binding Mode=OneWay, Path=Colors}" />
                                            </toolkit:DataField>
                                            <toolkit:DataField Grid.Row="2" Label="Couleur du fond" Width="Auto">
                                            <ComboBox ItemsSource="{Binding Mode=OneWay, ElementName=df, Path=DataContext}" />
                                            </toolkit:DataField>
                                    </Grid>
                                </DataTemplate>
                            </toolkit:DataForm.EditTemplate>
                        </toolkit:DataForm>

Discussions similaires

  1. Réponses: 15
    Dernier message: 23/08/2011, 14h26
  2. mvvm light toolkit pour application WPF
    Par helper_moi dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 21/06/2011, 14h45
  3. [MVVM Light] Relayer un click au ViewModel via Locator
    Par Nicolas Esprit dans le forum Silverlight
    Réponses: 3
    Dernier message: 23/12/2010, 10h04
  4. [SL4]MVVM Light toolkit + Messenger
    Par chris81 dans le forum Silverlight
    Réponses: 2
    Dernier message: 20/07/2010, 09h04

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