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

Windows Presentation Foundation Discussion :

UserControl : Binding observableCollection


Sujet :

Windows Presentation Foundation

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 24
    Par défaut UserControl : Binding observableCollection
    Bonjour,

    J'ai un petit problème sur le binding d'une observableCollection dans un userControl.

    En espérant que vous pourriez m'aider.

    Mon problème c'est que les données de mon observableCollection ne s'affiche pas dans mon UserControl.

    Pourtant lors du Load je fait un traite une partie de mes données pour des calcules et mon Observable est bien remplie dans le code Behind. Je pense que je dois avoir un problème sur le binding ou autres mais je ne vois pas quoi.

    Code ViewModel:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private ObservableCollection<ClassRange> m_Range = new ObservableCollection<ClassRange>();
            public ObservableCollection<ClassRange> Range
            {
                get { return m_Range; }
                set
                {
                    if (value == null || value == m_Range)
                        return;
     
                    m_Range = value;
                    OnPropertyChanged("Range");
                }
            }

    Ma class ClassRange est aussi dans mon viewModel

    Xaml de ma vue principale :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <monControl:MaListView ObservRange="{Binding Path=Range, Mode=TwoWay}" Grid.Column="0" Grid.Row="1"/>

    Code c# de mon Usercontrol

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
          public ObservableCollection<ClassRange> ObservRange
            {
                get { return (ObservableCollection<ClassRange>)GetValue(ObservRangeProperty); }
                set { SetValue(ObservRangeProperty, value); }
            }
     
            private static readonly DependencyProperty ObservRangeProperty =
                    DependencyProperty.Register("ObservRange", typeof(ObservableCollection<ClassRange>),
                    typeof(MaListview),
                    new UIPropertyMetadata(new ObservableCollection<ClassRange>()));

    Xaml du userControl

    Code xml : 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
     
           <ListView x:Name="m_listViewRange" ItemsSource="{Binding ObservRange}"  Background="#FF0D0D0D" Foreground="White" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Auto" Extensions:ListViewColumns.Stretch="true" SelectionMode="Single">
                <ListView.Resources>
                    <DataTemplate x:Key="rectangle" DataType="{x:Type Helpers:Range}">
                        <DockPanel>
                            <Rectangle Fill="#FF000000" Height="10" HorizontalAlignment="Left" Name="rectangle" Stroke="#FF797979" VerticalAlignment="Top"  Width="{Binding  Path=RangeMin}" />
                            <Rectangle Fill="#FF3366FF" Height="10" HorizontalAlignment="Left" Name="rectangle2" Stroke="#FF797979" VerticalAlignment="Top" Width="{Binding  Path=ActuRange}" />
                            <Rectangle Fill="#FF000000" Height="10" HorizontalAlignment="Left" Name="rectangle3" Stroke="#FF797979" VerticalAlignment="Top" Width="{Binding Path=RangeMax}" />
                        </DockPanel>
                    </DataTemplate>
     
                    <Style TargetType="{x:Type ListViewItem}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="Background" Value="Transparent" />
                                <Setter Property="BorderBrush" Value="#FF3370CA" />
                            </Trigger>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter Property="Background" Value="Transparent" />
                                <Setter Property="BorderBrush" Value="#FF3370CA" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
        </ListView.Resources>
                <ListView.View>
                    <GridView >
                        <GridView.ColumnHeaderContainerStyle>
                            <Style>
                                <Setter Property="FrameworkElement.Visibility" Value="Collapsed"/>
                            </Style>
                        </GridView.ColumnHeaderContainerStyle>
                        <GridViewColumn Width="50" DisplayMemberBinding="{Binding Path=Min}" />
                        <GridViewColumn CellTemplate="{StaticResource rectangle}" />
                        <GridViewColumn Width="50" DisplayMemberBinding="{Binding Path=Max}"/>
                        <GridViewColumn Width="50" DisplayMemberBinding="{Binding Status}"/>
                    </GridView>
                </ListView.View>
            </ListView>

    Par contre si je déclare ma dependency dans le code behind de ma vue principale et pas dans mon userControl j'ai mon binding qui marche sauf pour la partie ou je fait le traitement dans mon userControl.

    Merci d'avance

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Je pense qu'il ne faut pas utiliser un Binding mais un TemplateBinding pour te binder sur la propriété du control templaté...

    Au cas ou cela ne serait pas ca : tu as des messages d"erreurs dans la fenetre d'output ?

    Bon courage,

Discussions similaires

  1. wpf wrappanel bind ObservableCollection<Button>
    Par maxmax39 dans le forum C#
    Réponses: 3
    Dernier message: 06/05/2015, 15h28
  2. DataGrid binding observableCollection
    Par hbespoir2003 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 07/03/2012, 18h58
  3. [UserControl] Binding vers le parent
    Par al2000 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 26/09/2011, 16h41
  4. UserControl + Binding
    Par Dihel dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/04/2008, 10h13
  5. [WPF] UserControl -> binding ??
    Par UNi[FR] dans le forum C#
    Réponses: 1
    Dernier message: 10/09/2007, 11h31

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