WPF Obtenir de la fenêtre parent
Hy,
Dans ma MainWindow.xaml.cs fichier j'ai fait un getter pour obtenir la référence de ma listbox.
public ListBox LoggerList
{
get { return Logger; }
}
Maintenant, je veux accéder à la LoggerList à partir d'une classe normale, mais je n'ai pas de travail. J'ai essayé le suivant:
MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;
Mais cela ne fonctionne que dans un *xaml.cs fichier et pas dans des conditions normales *.cs fichier.
En ce qui concerne meilleur
WPF ListBox est peut être liée, au lieu d'avoir une propriété de votre zone de liste, vous devriez avoir une propriété à votre source contenant vos éléments, et de les lier à la zone de liste (LoggerList.ItemSource = maliste; Alors vous serez en mesure de lier vos classes à plusieurs windows et ainsi vous serez en mesure de les utiliser. La façon dont votre traitement, il est maintenant tout simplement pas la bonne façon. Vous devriez regarder dans la liaison et de la base de WPF exemples.
Essayez ceci:
Hy, il a essayé avec Fenêtre parentWindow = Application.Actuel.MainWindow. Mais je n'arrive pas à LoggerList.
J'ai besoin de cela parce que je veux de défilement automatique de la lsit boîte après l'ajout d'un élément: LoggerList.ScrollIntoView(LoggerList.Les Articles[LoggerList.Éléments.Count - 1]);
Essayez ceci:
Window parentWindow = Application.Current.MainWindow
.Hy, il a essayé avec Fenêtre parentWindow = Application.Actuel.MainWindow. Mais je n'arrive pas à LoggerList.
J'ai besoin de cela parce que je veux de défilement automatique de la lsit boîte après l'ajout d'un élément: LoggerList.ScrollIntoView(LoggerList.Les Articles[LoggerList.Éléments.Count - 1]);
OriginalL'auteur user2644964 | 2014-04-04
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de moyens d'accès à la
Window
s en WPF. Si vous en avez plusieurs, vous pouvez parcourir comme ceci:Si vous aviez un type particulier de coutume
Window
, vous pouvez utiliser ceci:Si vous êtes juste après une référence à la
MainWindow
, alors vous pouvez simplement utiliser ce:Cependant, en utilisant cette méthode, il ya une chance qu'il sera de retour
null
. Dans ce cas, assurez-vous de définir leMainWindow
de cette propriété dans son constructeur:Il convient de noter, cependant, que @woutervs est correct... vous devriez pas accéder aux contrôles d'INTERFACE utilisateur de
Window
s dans la bibliothèque de classes. Vous devriez vraiment lier des données à des collections pour laListBox.ItemsSource
et de manipuler la collecte de données à la place.Mise à JOUR >>
Je ne sais pas pourquoi votre
Application.Current
objet estnull
... ce pourrait être parce que vous avez chargé votre bibliothèque de classe dans une autreAppDomain
. De toute façon, je pense que vous êtes absent de la grande image. Il n'y a vraiment aucune raison pourquoi une bibliothèque de classe de la classe doit avoir besoin d'une référence à la principaleWindow
.Si vous devez effectuer un certain travail sur la collecte de données, puis il suffit de passer à la collecte de données de code derrière, ou de votre modèle de vue. Une fois le travail terminé, puis il suffit de passer à l'INTERFACE où vous avez accès à la
ListBox
et/ou la collecte de données liées à laItemsSource
propriété.Veuillez lire mon avant-dernier alinéa de nouveau.
Hy, j'ai également réglé le MainWindow de cette propriété dans son constructeur. Ouais, je la lie la collection observable à la liste, mais la liste n'est pas de défilement automatique avec la liaison. Avez-vous dire que ou quelque chose d'autre?
Vous pouvez faire un
ListBox
faites défiler jusqu'à la position de réglage de l'élément sélectionné dans votreObservablecollection<T>
... voir la Comment faire pour contrôler la position de défilement d'une liste dans une application WPF, MVVM question ici, sur un Débordement de Pile pour plus d'informations.Merci beaucoup pour le lien, il a travaillé.
OriginalL'auteur Sheridan