Ci
sono un certo numero di modi per accedere Window
s in WPF. Se si dispone di più aperta, allora si può scorrere attraverso di loro in questo modo:
foreach (Window window in Application.Current.Windows) window.Close();
Se si ha un particolare tipo di costume Window
, è possibile utilizzare questo:
foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>())
((YourCustomWindow)window).DoSomething();
Se sono solo dopo un riferimento al MainWindow
, allora si può semplicemente utilizzare questo:
Window mainWindow = Application.Current.MainWindow;
Tuttavia, con questo metodo, c'è una possibilità che tornerà null
. In questo caso, assicurarsi di aver impostato il MainWindow
a questa proprietà in esso del costruttore:
// From inside MainWindow.xaml.cs
Application.Current.MainWindow = this;
Va notato tuttavia, che @woutervs è corretto ... si dovrebbe non essere l'accesso ai controlli dell'interfaccia utente da Window
s in classi di biblioteca. Dovresti davvero associare le raccolte di dati allo ListBox.ItemsSource
e quindi manipolare la raccolta di dati.
UPDATE >>
Non so il motivo per cui l'oggetto è Application.Current
null
... potrebbe essere perché hai caricato la libreria di classi in un diverso AppDomain
. Ad ogni modo, penso che ti manchi il quadro generale. Non c'è davvero alcuna ragione per cui una classe di libreria di classe dovrebbe avere bisogno di un riferimento al principale Window
.
Se è necessario eseguire alcuni lavori sulla raccolta dati, è sufficiente passare la raccolta dati dal codice sottostante o dal modello di visualizzazione. Una volta completato il lavoro, è sufficiente restituirlo all'interfaccia utente in cui si ha accesso allo ListBox
e/o alla raccolta dati associata alla proprietà ItemsSource
.
Un ListBox WPF è collegabile, invece di avere una proprietà nella tua listbox dovresti avere una proprietà per la tua fonte contenente i tuoi articoli, e legarli alla listbox (LoggerList.ItemSource = myList; in questo modo sarai in grado di vincolare il tuo Classi a più finestre e quindi sarete in grado di usarli.Il modo in cui lo state gestendo ora non è il modo giusto.Vedete un'occhiata agli esempi WPF di base e vincolanti – woutervs
Provate questo: 'Finestra parentWindow = Application.Current. MainWindow'. –
Hy, provato con Window parentWindow = Application.Current.MainWindow, ma non riesco a ottenere LoggerList. – user2644964