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