2014-04-04 20 views
8

Hy,WPF Nhận cửa sổ chính của phụ huynh

Trong tệp MainWindow.xaml.cs của tôi, tôi đã làm cho trình thu thập tham chiếu đến hộp danh sách của tôi.

public ListBox LoggerList 
{ 
    get { return Logger; } 
}  

Bây giờ tôi muốn truy cập LoggerList từ một lớp bình thường nhưng tôi không làm việc. Tôi đã thử các cách sau:

MainWindow parentWindow = Window.GetWindow(this) as MainWindow; 
object selectedItem = parentWindow.LoggerList; 

Nhưng điều này chỉ hoạt động trong tệp * xaml.cs chứ không phải trong tệp * .cs bình thường.

Trân trọng

+0

Hộp danh sách WPF có thể ràng buộc, thay vì có thuộc tính vào hộp danh sách của bạn, bạn nên có thuộc tính cho nguồn chứa các mục của bạn và liên kết chúng với hộp danh sách (LoggerList.ItemSource = myList; . lớp học để nhiều cửa sổ và do đó bạn sẽ có thể sử dụng chúng cách bạn đang xử lý nó bây giờ chỉ là không đúng cách bạn nên nhìn vào ràng buộc và cơ bản ví dụ WPF – woutervs

+3

Hãy thử điều này:.. 'Window ParentWindow = Application.Current. . MainWindow' –

+0

Hỷ, thử nó với Window ParentWindow = Application.Current.MainWindow Nhưng tôi không thể có được LoggerList – user2644964

Trả lời

13

Có một số cách tiếp cận Window s trong WPF. Nếu bạn có nhiều mở, sau đó bạn có thể lặp qua chúng như thế này:

foreach (Window window in Application.Current.Windows) window.Close(); 

Nếu bạn đã có một loại đặc biệt của tùy chỉnh Window, bạn có thể sử dụng này:

foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>()) 
    ((YourCustomWindow)window).DoSomething(); 

Nếu bạn chỉ sau một tham chiếu đến MainWindow, sau đó bạn chỉ có thể sử dụng này:

Window mainWindow = Application.Current.MainWindow; 

Tuy nhiên, sử dụng phương pháp này, có một cơ hội mà nó sẽ trở lại null. Trong trường hợp này, hãy chắc chắn rằng bạn thiết lập MainWindow về tài sản trong đó của constructor này:

// From inside MainWindow.xaml.cs 
Application.Current.MainWindow = this; 

Cần lưu ý tuy nhiên, @woutervs là đúng ... bạn nên không thể truy cập vào giao diện điều khiển từ Window trong các lớp thư viện. Bạn thực sự nên dữ liệu liên kết các bộ sưu tập với ListBox.ItemsSource và sau đó thao tác thu thập dữ liệu để thay thế.


CẬP NHẬT >>

Tôi không biết tại sao đối tượng Application.Current của bạn là null ... nó có thể là do bạn đã nạp thư viện lớp của bạn thành một khác nhau AppDomain. Dù bằng cách nào, tôi nghĩ rằng bạn đang thiếu hình ảnh lớn. Có thực sự là không có lý do tại sao một lớp thư viện lớp cần một tham chiếu đến chính Window.

Nếu bạn cần phải thực hiện một số công việc về thu thập dữ liệu, sau đó chỉ cần vượt qua thu thập dữ liệu từ mã phía sau, hoặc mô hình nhìn của bạn. Khi công việc hoàn tất, sau đó chỉ cần chuyển nó trở lại giao diện người dùng nơi bạn có quyền truy cập vào ListBox và/hoặc bộ sưu tập là dữ liệu được liên kết với thuộc tính ItemsSource.

+0

Hy, dùng thử với Window parentWindow = Application.Current.MainWindow. Nhưng tôi không thể có được LoggerList. \t Tôi cần điều này vì tôi muốn tự động kiểm tra hộp danh sách sau khi thêm phần tử với: LoggerList.ScrollIntoView (LoggerList.Items [LoggerList.Items.Count - 1]); – user2644964

+0

Vui lòng đọc lại đoạn cuối cùng thứ hai của tôi. – Sheridan

+0

Hy, tôi cũng đặt MainWindow cho thuộc tính này trong hàm khởi tạo của nó. Vâng, tôi liên kết bộ sưu tập có thể quan sát với danh sách nhưng hộp danh sách không tự động cuộn bằng liên kết. Ý bạn là cái gì đó hay cái gì khác? – user2644964

Các vấn đề liên quan