2014-10-01 7 views
3

У меня есть DataGridTextColumn, содержащий логическое значение, эти логические значения возвращают TRUE или FALSE в столбце.boolean конвертер для печати изображения, просто распечатать имя изображения C#

Я хочу заменить это на два изображения: одно для TRUE, другое для FALSE.

это DataGrid:

<DataGrid x:Name="DonneesBrutes" IsReadOnly="True" ItemsSource="{Binding Path=ResultatCollectionGrande}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected"> 

      <DataGrid.Columns> 
       <DataGridTextColumn x:Name="PrisEnCompte" Width="50" Binding="{Binding Path=Flag, Converter={StaticResource BooleanConverter}}" Header="PEC"></DataGridTextColumn> 

с ресурсом:

<Window.Resources> 
    <local:BooleanConverter x:Key="BooleanConverter"/> 
</Window.Resources> 

это преобразователь:

public class BooleanConverter : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value.Equals(true)) return @"booleanTrue.png"; 
     return @"booleanFalse.png"; 
    } 

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

Преобразователь работает, он меняет то, что мои DataGridTextColumn дисплеи. Теперь он отображает «booleanTrue.png» для TRUE и «booleanFalse.png», но не отображает изображения.

Как я могу отобразить, что мне не хватает, чтобы распечатать эти изображения в моем DataGrid?

Заранее за вашу помощь.

ответ

1

Вместо использования DataGridTextColumn вам понадобится столбец Template для отображения изображения в этом столбце и применить привязку только в этом столбце шаблона. позвольте мне показать вам путь

Вашего DataGrid должен быть как этого

<DataGrid x:Name="DonneesBrutes" IsReadOnly="True" ItemsSource="{Binding Path=ResultatCollectionGrande}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected"> 
<DataGrid.Columns> 
    <DataGridTemplateColumn Header="PEC" x:Name="PrisEnCompte"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Image Height="50" Width="50" Source="{Binding Path=Flag, Converter={StaticResource booleanConverter}}"></Image> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

и ваш Логический преобразователь должен быть.

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value.Equals(true)) 
       return new Uri(@"C:\Users\pj827192\Desktop\Untitled.png"); 
      return new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg"); 
     } 

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

Конвертер не обязательно должен возвращать Uris. Это также могут быть строки, так как преобразование встроенного типа WPF для типа ImageSource (тип свойства «Источник» Image control) работает для обоих. Более того, когда изображения хранятся в виде сборочных ресурсов (которые я бы предположил из OP), вам придется возвращать действительные [URI файла файла ресурсов] (http://msdn.microsoft.com/en-us/library/aa970069. ASPX # Resource_File_Pack_URIs ___ Local_Assembly). Другой альтернативой было бы прямое создание и возвращение экземпляров BitmapImage или BitmapFrame. – Clemens

-1

Возможно, вы должны вернуть разметку для встраивания изображения вместо имени изображения.

+0

Изображения находятся на корне решения, поэтому добавление '' 'before, это то, что вы имеете в виду? – Flo

+0

Нет, я имею в виду возврат строки вроде: ”alternate Pieter21

+0

Возможно ли вернуть такую ​​строку в DataGrid.Columns? Я попробую. ** РЕДАКТИРОВАТЬ ** Кажется, это невозможно, требуется только DataGrid CheckBox/Combobox/Hyperlink/Template/Text. Возможно, один из них может позволить мне делать то, что я хочу? – Flo

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

  • Нет связанных вопросов^_^