2011-03-22 60 views
1

我現在已經很長一段時間了這個問題。我仍然不知道如何解決這個問題......我試圖將圖像綁定到我的數據網格中的一個值。Silverlight綁定圖像爲一個整數

該字段被稱爲Billable,它是0或1.當我有值1時,我想顯示一個greenCross。當值爲0時,我想顯示一個RedCross。

下面是代碼

<telerik:RadGridView Grid.Column="1" Grid.Row="0" x:Name="RadGridView1" 
          ItemsSource="{Binding TypeRegs}" 
          IsReadOnly="True" 
          DataContext="{Binding Source={StaticResource TypeRegViewModel}}" 
          AutoGenerateColumns="False" 
          ScrollMode="Deferred" 
          GridLinesVisibility="Horizontal" 
          IsSynchronizedWithCurrentItem="True" 
          SelectedItem="{Binding Path=SelectedTypeReg, Mode=TwoWay}" 
          SelectionUnit="FullRow"> 
       <telerik:RadGridView.Columns> 
        <telerik:GridViewDataColumn Header="Description" DataMemberBinding="{Binding Description}" /> 
        <telerik:GridViewDataColumn Header="Billable" DataMemberBinding="{Binding Billable}" /> 
       </telerik:RadGridView.Columns> 
      </telerik:RadGridView> 

沒有任何人有任何想法如何解決?

請分步告訴我。我嘗試了很多東西......他們都沒有工作。

THX

回答

1

我只是找到了答案傢伙。我會分享它;)

首先你需要創建一個看起來像這樣的coverter。

public class CommentTypeIconConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value != null) 
      { 
       int ct = int.Parse(value.ToString()); 
       if (ct == 1) 
       { 
        StreamResourceInfo sr = Application.GetResourceStream(
         new Uri("/COVR.TimeRegistration;component/Images/true.png", UriKind.Relative)); 
        BitmapImage bmp = new BitmapImage(); 
        bmp.SetSource(sr.Stream); 

        return bmp; 
       } 
       else 
       { 
        StreamResourceInfo sr = Application.GetResourceStream(
        new Uri("/COVR.TimeRegistration;component/Images/false.png", UriKind.Relative)); 
        BitmapImage bmp = new BitmapImage(); 
        bmp.SetSource(sr.Stream); 

        return bmp; 
       } 
      } 
      else 
      { 
       return MessageBox.Show("Fout"); 
      } 
     } 

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

這coverter將返回圖像

XAML中看起來像這樣

<telerik:RadGridView Grid.Column="1" Grid.Row="0" x:Name="RadGridView1" 
         ItemsSource="{Binding TypeRegs}" 
         IsReadOnly="True" 
         DataContext="{Binding Source={StaticResource TypeRegViewModel}}" 
         AutoGenerateColumns="False" 
         ScrollMode="Deferred" 
         GridLinesVisibility="Horizontal" 
         IsSynchronizedWithCurrentItem="True" 
         SelectedItem="{Binding Path=SelectedTypeReg, Mode=TwoWay}" 
         SelectionUnit="FullRow"> 
      <telerik:RadGridView.Columns> 
       <telerik:GridViewDataColumn Header="Description" DataMemberBinding="{Binding Description}"/> 
       <telerik:GridViewDataColumn Header="Billable" Width="50"> 
        <telerik:GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <Image Width="16" Height="16" Source="{Binding Billable,Converter={StaticResource CommentTypeIconConverter}}"> 
           </Image> 
         </DataTemplate> 
        </telerik:GridViewColumn.CellTemplate> 
       </telerik:GridViewDataColumn> 
      </telerik:RadGridView.Columns> 
     </telerik:RadGridView> 

這工作得很好!

如果您需要任何幫助,您可以問:)

+0

嗨我試圖做到這一點與您的方案沒有成功我使用這種方法得到sr = null。 – user773456 2012-10-09 17:57:37

+0

也試過以下沒有成功:Uri uri = new Uri(「pack:// application:,,,/Images/bullet_red.png」); BitmapImage source = new BitmapImage(uri); 返回來源; – user773456 2012-10-09 18:02:08

0

首先要將其綁定到GridView的列,而不是直接結合它Billable財產爲什麼的。而不是綁定,你可以使用DataTriggers。下面是我使用WPF的相同目的的代碼,請檢查是否它會幫助你在Silverlight:

<Image> 
    <Image.Style> 
     <Style TargetType="Image"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Billable}" Value="0"> 
        <Setter Property="Source" Value="RedCross.png" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Billable}" Value="1"> 
        <Setter Property="Source" Value="GreenCross.png" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 
+0

我是新來的Silverlight,所以我還是搞清楚什麼是做到這一點的最好辦法。在ASP.NET中,它更容易... 我在哪裏添加圖像? – Evert 2011-03-22 13:27:57

+0

@Evert,我沒有telerik控件的使用經驗,但看起來你使用的網格應該有某種'Image Column'。可能你可以谷歌文檔/教程這個列類型,它會幫助你實現所需的行爲。 – Snowbear 2011-03-22 13:37:50

+2

在SilverLight中沒有DataTriggers – Notter 2011-03-22 13:37:59