WPF Bekommen übergeordnete Fenster
Hy,
In meiner MainWindow.xaml.cs-Datei, machte ich einen getter, um den Verweis zu meiner listbox.
public ListBox LoggerList
{
get { return Logger; }
}
Nun will ich den Zugriff auf die LoggerList von einer normalen Klasse, aber ich arbeite nicht. Ich habe versucht, die folgenden:
MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;
Aber dies funktioniert nur in einer *xaml.cs-Datei und nicht in einer normalen *.cs-Datei.
Beste Grüße
- Eine WPF-ListBox gebunden werden, anstatt eine Eigenschaft, um Ihre listbox sollten Sie eine Immobilie haben, um Ihre Quelle mit Ihren Elementen, und binden Sie diese an die listbox (LoggerList.ItemSource = myList; Dann werden Sie in der Lage, binden Sie Ihre Klassen mit mehreren Fenstern und so werden Sie in der Lage, Sie zu nutzen. Die Art und Weise Ihrer Handhabung es ist jetzt einfach nicht der richtige Weg. Sie sollten sich in verbindliche und grundlegende WPF-Beispiele.
- Versuchen Sie dies:
Window parentWindow = Application.Current.MainWindow
. - Hy, habe es versucht mit Fenster parentWindow = Anwendung.Aktuelle.MainWindow. Aber ich kann nicht das LoggerList.
- Ich brauche diese, weil ich möchte autoscroll der lsit box nach dem Hinzugefügt ein element mit: LoggerList.ScrollIntoView(LoggerList.Items[LoggerList.Elemente.Count - 1]);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Reihe von Möglichkeiten, auf
Window
s in WPF. Wenn Sie mehrere öffnen, dann kann man Durchlaufen Sie wie folgt:Wenn Sie hatte eine bestimmte Art von benutzerdefinierten
Window
können Sie diese:Wenn Sie nur nach einem Verweis auf die
MainWindow
, dann nutzen Sie einfach dieses:Jedoch, mit dieser Methode, gibt es eine chance, dass er zurück
null
. In diesem Fall stellen Sie sicher, dass Sie dieMainWindow
diese Eigenschaft im Konstruktor:Es sollte jedoch angemerkt werden, dass @woutervs ist richtig... man sollte nicht werden, Zugriff auf die UI-Steuerelemente aus
Window
s in der Bibliothek von Klassen. Sie sollten wirklich Daten binden Sammlungen derListBox.ItemsSource
und dann die Daten Bearbeiten, die Sammlung statt.UPDATE >>
Ich weiß nicht, warum Ihr
Application.Current
Objekt istnull
... es könnte sein, dass Sie geladen haben, die Bibliothek-Klasse in eine andereAppDomain
. So oder so, ich denke, Sie sind fehlt das große Bild. Es gibt wirklich keinen Grund, warum Sie eine Bibliothek-Klasse-Klasse muss eine Referenz zu den wichtigstenWindow
.Wenn Sie brauchen, um einige Arbeit auf die Sammlung von Daten, dann geben Sie einfach die Daten, die Sammlung von code-hinter, oder Ihrer Ansicht Modell. Sobald die Arbeit abgeschlossen ist, dann übergeben Sie es zurück an den UI-wo haben Sie Zugriff auf die
ListBox
und/oder der Sammlung, die gebundenen Daten zu denItemsSource
Eigenschaft.ListBox
scrollen Sie zu position, indem ein ausgewählten Element in IhreObservablecollection<T>
... finden Sie in der so Steuern Sie die scroll-position von einer ListBox in eine MVVM WPF-app Frage auf Stack Overflow für weitere Informationen.VisualTreeHelper
, um zu Fuß die visuelle Struktur bis an das übergeordnete Fenster. Sie müssen eine neue Frage hier um weitere Informationen zu erhalten, oder Sie können finden Sie viele Beispiele online.Window.GetWindow()
macht den job. Danke!Application.Current.MainWindow
. 😉