2014-09-30 67 views
-1

我在DataGridTextColumn上有一個布爾值,我想打印一個圖像如果它是真的,而另一個圖像是假的。bool圖像c#引用對象沒有設置爲對象的實例

這是數據網格:

<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 BoolImageConverter}}" Header="PEC"></DataGridTextColumn> 

這是Windows.Resources,其中I定義轉換器和其圖像被用於:

<Window.Resources> 
    <Image x:Key="TrueImage" Source="booleanTrue.png"/> 
    <Image x:Key="FalseImage" Source="booleanFalse.png"/> 
    <local:BoolToImage TrueImage="{StaticResource TrueImage}" FalseImage="{StaticResource FalseImage}" x:Key="BoolImageConverter"/> 
</Window.Resources> 

並且有轉換器:

public class BoolToImage : IValueConverter 
{ 
    public Image TrueImage { get; set; } 
    public Image FalseImage { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    var viewModel = (ViewModel)(value as System.Windows.Controls.ListBoxItem).DataContext; 
    if (!(value is bool)) 
    { 
     return null; 
    } 

     bool b = (bool) viewModel.ActiviteCollection.FirstOrDefault().Flag; 
    if (b) 
    { 
     return this.TrueImage; 
    } 
    else 
    { 
     return this.FalseImage; 
    } 
} 

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

當我聲明我的var viewModel時我有錯誤the reference object is not set to an instance of an object我認爲這是聲明(value as System.Windows.Controls.ListBoxItem)這是錯誤的,但我不知道如何解決這個問題。

A精度,viewModel.ActiviteCollection.FirstOrDefault().Flag;是我發送到DataGridTextColumn我想要轉換爲圖像的布爾值。

我希望我足夠精確,如果您需要更多信息,我可以編輯我的帖子。

感謝您的幫助。

Greetings,

Flo。

+3

'我有錯誤引用對象未設置爲對象的實例我認爲它是聲明(值爲System.Windows.Controls.ListBoxItem)''。任何機會,你可以簡單地在你的轉換器中放置一個斷點並檢查你自己?在運行時查看什麼類型的值,它應該可以幫助您調試您的問題。 – decPL 2014-09-30 09:09:08

+0

Ad 1.如果值爲true,您如何期望能夠將其轉換爲System.Windows.Controls.ListBoxItem? 廣告2. http://msdn.microsoft.com/en-us/library/ktf38f66%28v=vs.71%29.aspx – decPL 2014-09-30 09:16:22

回答

2

value在您的Convert方法是實際值轉換(屬性值Flag)。

因此,value as System.Windows.Controls.ListBoxItem將返回null

使用這個代替:

if ((bool)value) 
{ 
} 

IValueConverter MSDN上的文檔中使用的value

相關問題