やあ、
MainWindow.xaml.csファイルで、リストボックスへの参照を取得するゲッターを作成しました。
public ListBox LoggerList
{
get { return Logger; }
}
今、通常のクラスからLoggerListにアクセスしたいのですが、動作しません。私は次を試しました:
MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;
ただし、これは* xaml.csファイルでのみ機能し、通常の* .csファイルでは機能しません。
宜しくお願いします
WPFでWindow
sにアクセスする方法はいくつかあります。いくつか開いている場合は、次のように繰り返し処理できます。
foreach (Window window in Application.Current.Windows) window.Close();
特定のタイプのカスタムWindow
がある場合、これを使用できます。
foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>())
((YourCustomWindow)window).DoSomething();
MainWindow
への参照の直後にいる場合、単純にこれを使用できます。
Window mainWindow = Application.Current.MainWindow;
ただし、このメソッドを使用すると、null
を返す可能性があります。この場合、コンストラクターでこのプロパティにMainWindow
を必ず設定してください。
// From inside MainWindow.xaml.cs
Application.Current.MainWindow = this;
ただし、@ woutervsは正しいことに注意してください... notライブラリクラスのWindow
sからUIコントロールにアクセスする必要があります。本当にコレクションをListBox.ItemsSource
にデータバインドしてから、代わりにデータコレクションを操作する必要があります。
更新>>
Application.Current
オブジェクトがnull
である理由がわかりません...クラスライブラリを別のAppDomain
にロードしたことが原因の可能性があります。いずれにせよ、あなたは全体像を見逃していると思います。クラスライブラリクラスがメインWindow
への参照を必要とする理由はまったくありません。
データコレクションで何らかの作業を実行する必要がある場合は、コードビハインドまたはビューモデルからデータコレクションを渡すだけです。作業が完了したら、ListBox
および/またはItemsSource
プロパティにデータバインドされたコレクションにアクセスできるUIにそれを渡すだけです。