2009-12-08 33 views
6

Dễ dàng cho tất cả các bạn ...Silverlight - làm thế nào để tôi nhận được văn bản của mục đã chọn trong hộp tổ hợp

Tôi mới sử dụng Silverlight và thiếu các thứ như DataTables và mọi thứ. Những gì tôi cũng đang đấu tranh với là làm thế nào để có được văn bản của mục hiện đang được chọn của combobox của tôi. Trong winforms tôi đã có thể thực hiện:

ComboBox myCombo = new ComboBox....... 
string selected = myCombo.Text; 

Tôi đang đấu tranh để có được thông tin này.

Trả lời

9

Các mục chọn của hộp combo của bạn là bất cứ loại mặt hàng hiện đang nắm giữ. Vì vậy, nếu bạn đặt liên kết thành tập hợp các chuỗi, thì mục đã chọn sẽ là một chuỗi:

string mySelectedValue = ((string)MyComboBox.SelectedItem); 

Nếu nó là đối tượng phức tạp hơn, bạn sẽ cần phải sử dụng và đối tượng mong muốn. Nếu bạn có XAML bằng cách sử dụng lớp mục hộp danh sách, như:

<ComboBox x:Name="MyComboBox"> 
    <ComboBox.Items> 
     <ComboBoxItem> 
      <TextBlock Text="Hello World"/> 
     </ComboBoxItem> 
    </ComboBox.Items> 
</ComboBox> 

Sau đó, bạn sẽ truy cập vào mục đã chọn như thế này:

string mySelectedValue = 
    ((TextBlock)((ComboBoxItem)MyComboBox.SelectedItem).Content).Text; 
+0

Tôi nghĩ Calanus sẽ trả lời thẳng cho câu hỏi – Raghurocks

+0

Câu trả lời của tôi là 3 tuổi. Tôi đã không được ở Silverlight một thời gian vì vậy nó là hợp lý rằng câu trả lời của Calanus có thể làm việc trong phiên bản hiện tại của Silverlight; Tôi không thể bình luận về điều đó. Tôi không nghĩ rằng nó đã làm cho các mục hộp combo phong phú như một trong những mô tả ở đây khi tôi trả lời. –

+0

Không hoạt động trên đèn chiếu sáng mới nhất. "Không thể truyền đối tượng thuộc loại 'System.Windows.Controls.ComboBoxItem' để nhập 'System.String'." –

-1
myCombo.SelectedItem.Content 

sẽ trả lại nội dung của ComboBoxItem. Điều này có thể là một TextBlock, vv tùy thuộc vào những gì bạn có trong đó, và những gì bạn đang sử dụng cho một mẫu mục.

+1

Không, điều đó không hoạt động 1) vì SelectedItem không phải là một chuỗi và 2) ngay cả khi bạn làm .ToString() trên nó sau đó nó trả về System.Windows.Controls.ComboBoxItem. Tôi biết tôi có thể phân tích cú pháp này và nhận được thông tin nhưng chắc chắn có một cách dễ dàng hơn? – Calanus

7

Đúng vậy, câu trả lời là sử dụng myCombo.SelectionBoxItem.ToString()

+0

Xác nhận công trình trên bản chiếu bạc mới nhất –

3

Đối với một đối tượng phức tạp, sử dụng phản ánh với các tài sản DisplayMemberPath:

var itemType = cbx.SelectedItem.GetType(); 
var pi = itemType.GetProperty(cbx.DisplayMemberPath); 
var stringValue = pi.GetValue(cbx.SelectedItem, null).ToString(); 
+0

Cảm ơn rất nhiều, Giải pháp của bạn là giải pháp hoạt động trong mọi tình huống – sepisoad

0

Nếu bạn có một combobox đơn giản cho một mảng các chuỗi, bạn có thể lấy chuỗi lựa chọn sử dụng

(string)e.AddedItems[0]; 

Giả sử tôi có kết hợp danh sách sản phẩm và tôi muốn biết tên sản phẩm đã chọn. Vì vậy, trong tổ chức sự kiện SelectionChanged tôi viết đoạn mã sau:

private void productCombo_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
     { 
      string product_type=(string)e.AddedItems[0]; 
     } 
1
string txt=(comboboxID.SelectedItem as BindingClass).Text.ToString(); 

string value=(comboboxID.SelectedItem as BindingClass).Value.ToString(); 


public class BindingClass 
{ 
    public string Text 
     { 
     set; 
      get; 
     } 

    public string Value 
     { 
     set; 
      get; 
     } 
} 
+1

Bộ riêng; sẽ đặt trường thuộc tính ở chế độ riêng tư. – PhilipChrist

1
((ComboBoxItem)comboBox1.SelectedItem).Content.ToString() 

tôi đã nhận nó làm việc bằng cách tuyên bố này.

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