Hy,
Dans mon fichier MainWindow.xaml.cs, j'ai créé un getter pour obtenir la référence à ma zone de liste.
public ListBox LoggerList
{
get { return Logger; }
}
Maintenant, je veux accéder à la LoggerList à partir d'une classe normale mais je ne travaille pas. J'ai essayé ce qui suit:
MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;
Mais cela ne fonctionne que dans un fichier * xaml.cs et non dans un fichier * .cs normal.
Meilleures salutations
Il existe plusieurs façons d'accéder à Window
s dans WPF. Si vous en avez plusieurs ouverts, vous pouvez les parcourir comme suit:
foreach (Window window in Application.Current.Windows) window.Close();
Si vous aviez un type particulier de Window
personnalisé, vous pouvez utiliser ceci:
foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>())
((YourCustomWindow)window).DoSomething();
Si vous êtes juste après une référence au MainWindow
, alors vous pouvez simplement utiliser ceci:
Window mainWindow = Application.Current.MainWindow;
Cependant, en utilisant cette méthode, il est possible qu'elle renvoie null
. Dans ce cas, assurez-vous que vous définissez MainWindow
sur cette propriété dans son constructeur:
// From inside MainWindow.xaml.cs
Application.Current.MainWindow = this;
Il convient de noter cependant que @woutervs est correct ... vous devez pas accéder aux contrôles d'interface utilisateur à partir de Window
s dans les classes de bibliothèque. Vous devez vraiment lier les collections de données au ListBox.ItemsSource
, puis manipulez la collecte de données à la place.
MISE À JOUR >>
Je ne sais pas pourquoi ton Application.Current
l'objet est null
... cela pourrait être dû au fait que vous avez chargé votre bibliothèque de classes dans un autre AppDomain
. Quoi qu'il en soit, je pense que vous manquez la vue d'ensemble. Il n'y a vraiment aucune raison pour qu'une classe de bibliothèque de classes ait besoin d'une référence au Window
principal.
Si vous devez effectuer un travail sur la collecte de données, passez simplement la collecte de données à partir du code derrière ou de votre modèle de vue. Une fois le travail terminé, il vous suffit de le renvoyer à l'interface utilisateur où vous avez accès à ListBox
et/ou à la collection qui est des données liées à la propriété ItemsSource
.