2008-09-03 11 views
5

Tôi biết trong ASP.NET Tôi có thể lấy một mục từ một DropDownList bằng cách sử dụngTìm mục trong WPF ComboBox

DropDownList1.Items.FindByText 

Có một phương pháp tương tự như tôi có thể sử dụng trong WPF cho một ComboBox?

Đây là kịch bản.

Tôi có một bảng được gọi là RestrictionFormat có chứa một cột được gọi là RestrictionType, loại là một khóa nước ngoài vào một bảng lưu trữ các giá trị này.

Trong ứng dụng trình soạn thảo của tôi, tôi đang viết, khi người dùng chọn RestrictionFormat từ một ComboBox (điều này hoạt động tốt), tôi đang kéo lên các chi tiết để chỉnh sửa. Tôi đang sử dụng ComboBox thứ hai để đảm bảo người dùng chỉ chọn một RestrictionType khi chỉnh sửa. Tôi đã có thuộc tính ràng buộc combobox thứ hai từ bảng RestrictionType, nhưng tôi cần thay đổi chỉ mục đã chọn trên nó để khớp với giá trị được chỉ định trong bản ghi.


Đây là kịch bản.

Tôi có một bảng được gọi là RestrictionFormat có chứa một cột được gọi là RestrictionType, loại là một khóa nước ngoài vào một bảng lưu trữ các giá trị này.

Trong ứng dụng trình soạn thảo của tôi, tôi đang viết, khi người dùng chọn RestrictionFormat từ một ComboBox (điều này làm việc tốt), tôi đang kéo lên các chi tiết để chỉnh sửa. Tôi đang sử dụng ComboBox thứ hai để đảm bảo người dùng chỉ chọn một RestrictionType khi chỉnh sửa. Tôi đã có thuộc tính ràng buộc combobox thứ hai từ bảng RestrictionType, nhưng tôi cần thay đổi chỉ mục đã chọn trên nó để khớp với giá trị được chỉ định trong bản ghi.

Điều này có hợp lý không?

+0

ComboBox chỉ là Chế độ xem cho dữ liệu của bạn ... Tôi không nghĩ rằng đó là ý tưởng hay khi thực hiện phát triển theo hướng UI trong trường hợp này. Bạn nên thực hiện tìm kiếm dựa vào nguồn dữ liệu hoặc bộ sưu tập các mục thay vì kiểm soát giao diện người dùng. Nếu không, bạn có thể bị mắc kẹt với việc bị ràng buộc với việc triển khai cụ thể phần giao diện người dùng rất khó để duy trì và hỗ trợ trong tương lai. –

Trả lời

9

Bạn có thể sử dụng ItemContainerGenerator không?

ItemContainerGenerator chứa phương thức ContainerFromItem lấy tham số đối tượng.Nếu bạn có một tham chiếu đến đối tượng đầy đủ mà combobox của bạn có chứa (hay một cách để tái tạo lại nó), bạn có thể sử dụng như sau:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject); 
+0

Hehe bạn đánh tôi với nó :) – Arcturus

2

Trong WPF, bạn có thể sử dụng phương thức FindName.

XAML:

<ComboBox Name="combo"> 
     <ComboBoxItem Name="item1" >1</ComboBoxItem> 
     <ComboBoxItem Name="item2">2</ComboBoxItem> 
     <ComboBoxItem Name="item3">3</ComboBoxItem> 
    </ComboBox> 

Code-behind file

item1.Content = "New content"; // Reference combo box item by name 
    ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method 

Để tìm mục theo nội dung của nó, bạn có thể sử dụng UI automation.

1

thay vì cố gắng ràng buộc SelectedIndex tại sao bạn không chỉ liên kết SelectedItem trong ComboBox với giá trị trong bản ghi?

nói cách khác, đặt DataContext của ComboBox (hoặc mẹ) đến 'kỷ lục' chọn và ràng buộc SelectedItem trên ComboBox với một tài sản vào 'kỷ lục' tiếp xúc ..

nó có thể giúp nếu bạn có thể cung cấp một số đoạn mã hoặc các chi tiết bổ sung để phản hồi có thể cụ thể hơn và tham khảo các biến và loại bạn đang sử dụng trong cả bản ghi nguồn và ComboBox mà bạn đã điền.

0

Bạn có thể lấy mục combobox theo hai cách:

By mục :

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem); 

By index:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1); 
0

bạn có thể cho một số bối cảnh như chính xác những gì bạn đang tr ying để làm gì?

Bạn đặt đối tượng nào vào Combobox của mình và sử dụng phương pháp nào? (Bạn có đang thiết lập hoặc ràng buộc thuộc tính ItemsSource không?) Tại sao bạn cần tìm kiếm một mục bằng "văn bản" của nó? Cách sử dụng thông thường nhất trong WPF là liên kết thuộc tính SelectedItem với một cái gì đó khác để bạn có thể lấy/thiết lập mục nhập đã chọn bằng cách sử dụng biểu diễn của bạn. Có yêu cầu cụ thể nào bạn cần tìm một mục cụ thể trong danh sách không?

Trường hợp xấu nhất, bạn có thể thực hiện tìm kiếm trên bộ sưu tập mà bạn ràng buộc ComboBox của mình bằng cách sử dụng LINQ to Objects.

Đừng nhầm lẫn ComboBoxItem (tức là phần tử được tạo ra cho bạn đằng sau hậu trường bởi WPF khi bạn liên kết ItemsSource) với SelectedItem, là đối tượng thực trong bộ sưu tập mà bạn liên kết. Đó thường là nguồn gốc của hầu hết các vấn đề với WPF khi bạn không quen với nó. Có vài trường hợp quý giá khi bạn cần tìm ComboBoxItem thực tế.