2013-06-14 5 views
1

Я работаю над настольным WPF-приложением (.net 4). Одно из его окон содержит tabControl, чьи tabitems содержат каждый Listview, вид которого равен GridView. TabItems, ListViews и GridViews динамически генерируются. Когда пользователь нажимает кнопку на каждом tabitem, представление ListView обновляется по умолчанию по умолчанию DataTable от SQL Server (конечно, выбранные строки зависят от запроса пользователя, но здесь это не имеет значения).WPF ListView-GridView: связать образ

Все работает просто отлично, с (сокращенным) кодом ниже для GridView (г.в.) генерируется динамически:

foreach (KeyValuePair<string, string> Column in Columns) 
{ 
    GridViewColumn gvc = new GridViewColumn(); 
    gvc.DisplayMemberBinding = new Binding(Column.Key); 
    gv.Columns.Add(gvc); 
} 

Как вы можете видеть, что я создал словарь с именами столбцов соответствия столбцов DataTable, полученный от SQL Server (я использую Column.Value для специального использования, также несущественный здесь).

Мой вопрос «просто»:

Один из столбца содержит значение, которое я хотел бы показать, как логотип; Очевидно, столбец SQL-сервера содержит строки (скажем, «a» или «b»), и у меня есть изображения с именем «a.png» и «b.png» (которые я могу отображать динамически, например testimage.Source = new BitmapImage(new Uri("../../images/a.png", UriKind.Relative))).

Итак, как я мог в C# заменить буквы «a» и «b» в столбце ListView на «a.png» и «b.png»?

Надеюсь, я поняла и уже благодарю всех людей, которые возьмут на себя время, чтобы прочитать и попытаться ответить на мой вопрос.

ответ

1

Вы можете использовать Data Binding ValueConverter для этого

Ваш конвертер класс -

public class MyImageConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      string imageName = (string) value; 
      return new BitmapImage(new Uri("../../images/" + imageName + ".png", UriKind.Relative)); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

В коде-за

foreach (KeyValuePair<string, string> Column in Columns) 
{ 
    GridViewColumn gvc = new GridViewColumn(); 
    Binding binding = new Binding(Column.Key); 
    if (Column.Key == "Image") 
    { 
     binding.Converter = new MyImageConverter(); 
    } 
    gvc.DisplayMemberBinding = binding; 
    gv.Columns.Add(gvc); 
} 
+0

Thx, но он не работает: в displaymemberbinding просто показывает путь, отправленный MyImageConverter; тем не менее, решение для всего кода - это путь, но моя проблема заключается в создании кода, лежащего в основе шаблона данных, который указывает на конвертер ... –

+0

Хорошо, я понял, посмотрю полный ответ на http: // social .msdn.microsoft.com/Форум/EN-US/МОФ/резьба/0de6df72-856a-4dc4-A063-ffc32baa393d –

Смежные вопросы