2014-10-01 41 views
3

我有一個DataGridTextColumn包含一個布爾值,這些布爾值在列上返回TRUE或FALSE。布爾轉換器打印圖像,只是打印圖像名稱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」,但它不顯示圖像。

我該如何display'em,我錯過了什麼以在我的DataGrid中打印這些圖像?

在此先感謝您的幫助。

回答

1

除了使用DataGridTextColumn之外,還需要使用Template列來在此列中顯示Image,並僅在此模板列中應用您的綁定。讓我給你帶路

你的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控件的'Source'屬性的類型)適用於兩者。此外,當圖像作爲程序集資源(我將從OP中假設)存儲時,您將不得不返回有效的[資源文件包URI](http://msdn.microsoft.com/zh-cn/library/aa970069。 ASPX#Resource_File_Pack_URIs ___ Local_Assembly)。另一種方法是直接創建並返回BitmapImage或BitmapFrame實例。 – Clemens 2014-10-01 09:32:52

-1

也許你應該返回嵌入圖像的標記而不是圖像名稱。

+0

這些圖像是解決方案的根源,所以在之前添加'\',是什麼意思? – Flo 2014-10-01 08:51:10

+0

不,我的意思是返回一個字符串,如: 」alternate Pieter21 2014-10-01 08:59:06

+0

是否有可能在DataGrid.Columns上返回像這樣的字符串?我會盡力。 **編輯**似乎是不可能的,它只需要DataGrid複選框/組合框/超鏈接/模板/文本也許一個'em可以讓我做我想做的? – Flo 2014-10-01 09:00:56