Bonjour,

J'ai un petit souci en WPF.
Je créé une application qui doit synchroniser plusieurs types de données et pouvoir les manipuler quelque soit l'écran une fois ces données synchroniser.

Mon application est basé sur des TabControls et des TabsItem.
Chaque TabItem correspond à un UserControl.

Exemple :
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
<TabControl Style="{StaticResource BlueTabControl}" x:Name="TabControlSynchronisation" SelectionChanged="TabControlSynchronisation_SelectionChanged">
			<TabItem Header="Global" Style="{DynamicResource BlueTabItem}" MinWidth="100" Height="40" Cursor="Hand">
				<Grid>
					<local:SynchronisationGlobalView />
				</Grid>
			</TabItem>
			<TabItem Header="Article &amp; Remise" Style="{DynamicResource GreenTabItem}" MinWidth="100" Height="40" Cursor="Hand">
				<Grid>
					<local:SynchronisationArticleRemiseView />
				</Grid>
			</TabItem>
			<TabItem Header="Client" Style="{DynamicResource OrangeTabItem}" Width="100" Height="40" Cursor="Hand">
				<Grid>
					<local:SynchronisationClientView />
				</Grid>
			</TabItem>
			<TabItem Header="Commande" Style="{DynamicResource MagentaTabItem}" MinWidth="100" Height="40" Cursor="Hand">
				<Grid>
					<local:SynchronisationCommandeView />
				</Grid>
			</TabItem>
			<TabItem Header="Action" Style="{DynamicResource PurpleRedTabItem}" MinWidth="100" Height="40" Cursor="Hand">
				<Grid>
					<local:SynchronisationActionView />	
				</Grid>
			</TabItem>
		</TabControl>

Un UserControl se charge de la synchronisation (dans cet exemple, je synchronise des familles d'articles).
Ma synchronisation récupère une liste de famille sur le serveur distant et l'écrit dans une base de données "local".

Ma base de données est donc remplie de famille après la synchronisation.

Un de mes UserControl doit afficher ma liste de famille, pour ce fait j'ai donc effectuer un list en linq to sql de ma table famille et retourne une observable collection :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
public ObservableCollection<Famille> List()
        {
            System.Linq.IQueryable<Famille> Return = from Table in this.DBLocal.Famille
                                                     select Table;
            return new ObservableCollection<Famille>(Return.ToList());
        }

Mon problème se situe ici :
- Si je vais sur mon UserControl affichant mes familles avant de synchroniser mes familles et que j'y retourne après, mon UserControl n'est pas rafraîchit.
Mon but ici est de rafraîchir dynamiquement mon observable collection une fois ma synchronisation finie.

Mon UserControl comprend un datagrid affichant ces familles :

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<DataGrid ItemsSource="{Binding ListFamilleSync}" HorizontalAlignment="Left" x:Name="DataGridFamilleSync" Margin="240,40,0,0" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" SelectionMode="Single" GridLinesVisibility="None" HeadersVisibility="Column" IsReadOnly="True" Width="560" Height="200" VerticalAlignment="Top" d:LayoutOverrides="VerticalAlignment" RowHeight="30">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Code" x:Name="DataGridTexBoxColumnFamilleSyncCode" Width="100" Binding="{Binding Fam_CodeFamille}" />
                <DataGridTextColumn Header="Intitulé" x:Name="DataGridTexBoxColumnFamilleSyncIntitule" Binding="{Binding Fam_Intitule}" Width="321" />
                <DataGridTemplateColumn Header="Supprimer" Width="120">
                    <DataGridTemplateColumn.CellTemplate >
                        <DataTemplate>
                            <Button Cursor="Hand" x:Name="DataGridFamilleSyncDelete" >Supprimer</Button>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

Ce UserControl est nommé ConfigurationArticleView

Mon ViewModel est nommé ConfigurationArticleViewModel et comprend :
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
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
public class ConfigurationArticleViewModel : ViewModelBase
    {
        #region Member Fields
 
        private ObservableCollection<Model.Local.Famille> m_ListFamilleSync;
 
        private ObservableCollection<Model.Local.Famille> m_ListFamilleNotSync;
 
        #endregion
 
        #region Properties
        public ObservableCollection<Model.Local.Famille> ListFamilleSync
        {
            get
            {
                return this.m_ListFamilleSync;
            }
            set
            {
                this.m_ListFamilleSync = value;
                OnPropertyChanged("ListFamilleSync");
            }
        }
 
        public ObservableCollection<Model.Local.Famille> ListFamilleNotSync
        {
            get
            {
                return this.m_ListFamilleNotSync;
            }
            set
            {
                this.m_ListFamilleNotSync = value;
                OnPropertyChanged("ListFamilleNotSync");
            }
        }
        #endregion
 
        #region Constructors()
        public ConfigurationArticleViewModel()
        {
            Model.Local.FamilleRepository FamilleRepository = new Model.Local.FamilleRepository();
            this.ListFamilleSync = FamilleRepository.ListSyncOrderByCodeFamille(true);
            this.ListFamilleNotSync = FamilleRepository.ListSyncOrderByCodeFamille(false);
        }
        #endregion

Et dans le .cs de mon UserControl, j'ai :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public ConfigurationArticleView()
		{
			this.InitializeComponent();
            this.DataContext = new ViewModel.Configuration.ConfigurationArticleViewModel();
		}

Ma question est donc : Comment puis je recharger dynamiquement mon observablecollection (ou mon datacontext) sachant que je n'ai pas possibilité (à ma connaissance) de changer le statut d'un datacontext à partir d'un autre usercontrol.

En espérant que vous m'ayez compris, merci d'avance pour vos réponses