Bonsoir à tous,
J'aimerais avoir votre avis et quelques conseils concernant la réalisation de mon application.
J'ai développé plusieurs applications C# en autodidacte, essentiellement sur du WinForm.
Afin de voir d'autre chose, je suis passé récemment au WPF, je ne maitrise pas complètement, voir, pas énormément le Binding de donnée.
Maintenant que le contexte est posé, j'ai une solution contenant 3 projets :
- Une application WPF,
- Un service Windows,
- Une bibliothèque.
Le but de la solution et de permettre la modification par le service des interfaces réseau de la machine, sans devoir lancer une application en Admin en permanence.
La bibliothèque contient une classe permettant avec la quasi-totalité du code du service, cela me permet notamment de charger la nouvelle DLL lorsque je fais une mise à jour. Cette partie fonctionne.
Elle contient également une deuxième classe utilisée par l'application et le service.
L'application et le service dialogue en TCP via TcpListener et TcpClient. Chacun instancie un serveur et un client pour le dialogue.
Cette partie fonctionne.
Mon application possède une MainWindow avec un Frame permettant de gérer l'affichage de page. Seul le MainWindow instancie le serveur et client TCP.
J'ai actuellement un souci et j'aimerais votre avis sur la façon de faire.
Lorsque j'arrive sur une page que j'appelle "Adressage Direct", j'utilise une méthode statique de la MainWindow pour envoyer une demande au service.
Le service me répond sans problème. Je dois ensuite avec cette donnée remplir une combo-Box qui est sur la page "Adressage Direct" actuellement ouverte.
J'instancie une ObservableCollection à l'ouveture de la page pour le Bind avec la ComboBox.
J'ai une méthode Static sur la page "Adressage Direct" qui permet à ma MainWindow, lors de la réponse du service de remplir cette collection.
Voici le code de la page à ce stade.
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
| public partial class AdressageDirect : Page
{
public string Sel_Combo { get; set; }
public static ObservableCollection<string> ListCB { get; set; }
public AdressageDirect()
{
InitializeComponent();
ListCB = new ObservableCollection<string>();
DataContext = this;
}
private void BT_Refresh_Click(object sender, RoutedEventArgs e)
{
MainWindow.DemandeInterface();
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
MainWindow.DemandeInterface();
}
public static void MAJ_CB()
{
ListCB = new ObservableCollection<string>(MainWindow.IPM.ListeNomInterfaces);
}
} |
Je bind de cette manière dans le XAML :
<ComboBox x:Name="CB_Interface" Margin="10,0" VerticalAlignment="Center" Grid.Column="1" FontSize="18" ItemsSource="{Binding Path=ListCB}" SelectedItem="{Binding Sel_Combo}"/>
Lors de la mise à jour de la collection, en Debug, elle se remplit bien, mais la ComboBox ne bouge pas.
Aucune erreur de liaison à première vue, car si j'ajoute lors de l'ouverture de la page une donnée à la collection, la combo-box l'affiche bien.
Enfin, je me dis que je prends peux-être pas le problème dans le bon sens.
J'aimerais votre avis sur mon problème, mais également selon vous, quand vous avez une application avec des "Pages". Comment réalisez-vous les liens entre l'application "Main" et les différentes pages ?
J'espère avoir été clair ^^
Merci à tous d'avance pour vos réponses et votre temps.
Partager