2012-02-25 34 views
16

tôi có một combobox được ràng buộc với một cột DataTable như thế này:.Sử dụng chuyển đổi vào các mặt hàng bị ràng buộc trong combobox

ComboBox.DataContext = DataDataTable;     
ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString(); 

Các IDNr trong Cột luôn luôn bắt đầu với 4 chữ cái theo sau với số ID (ví dụ BLXF1234). Tôi cần hiển thị các mục trong Combobox không có Chữ cái (tôi cần 1234 được hiển thị trong hộp tổ hợp).

Vì vậy, tôi đã viết một chuyển đổi:

class IDPrefixValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      string s = value.ToString(); 
      if (s.Contains("BL")) 
      { 
       return s.Substring(4); 
      } 
      else 
      { 
       return s; 
      } 
     } 
     return ""; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    }  

Không, làm thế nào tôi có thể nói với combobox để sử dụng bộ chuyển đổi để hiển thị các mục không? tôi đã cố gắng này trong XAML:

ItemsSource="{Binding}" 
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}" 

Nhưng vẫn không làm việc ... bất kỳ ý tưởng? Cảm ơn

+0

mmm ... vẫn không biết lỗi ở đâu là ... – lebhero

+0

'DisplayMemberPath' là một đường dẫn ** đến thuộc tính ** để hiển thị không phải là một ràng buộc. Nếu bạn áp dụng công cụ chuyển đổi, bạn sẽ không đạt được gì. –

+0

ok, cảm ơn anyway iam kiểm tra những gì nên được định dạng các mục combobox !!!? – lebhero

Trả lời

42

Bạn có thể thay đổi ItemTemplate của ComboBox và sử dụng chuyển đổi của bạn:

<ComboBox ItemsSource="{Binding}"> 
    <ComboBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Converter={StaticResource IDPrefixValueConverter}}"/> 
    </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Mỗi mục được ràng buộc với các mục trong ItemsSource. Bằng cách sử dụng trình biến đổi trong ràng buộc, bạn có thể thực hiện chuyển đổi bạn muốn.

+0

Cảm ơn bạn, vấn đề đã được ràng buộc combobox trong mã phía sau ... nhưng điều này giải quyết vấn đề của tôi .. – lebhero

+1

Điều này thực sự áp dụng các công cụ chuyển đổi cho bất kỳ của các mục trong danh sách? Tôi đã thử mã nhưng có vẻ như bộ chuyển đổi chỉ được sử dụng cho mục đã chọn. – tabina

+0

@tabina: Nó hoạt động với một 'ComboBox' đơn giản giống như một trong mẫu của tôi. Có lẽ bạn có một 'ComboBox' phức tạp hơn? Đây là câu trả lời cho câu hỏi có vẻ trái ngược với vấn đề của bạn: http://stackoverflow.com/a/8247049/98607 –

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