2011-03-22 7 views
1

У меня эта проблема уже давно. И все же я не знаю, как это исправить ... Я пытаюсь привязать изображение к значению в моем datagrid.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

Я только что нашел ребята ответа. Я поделюсь им;)

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

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

+0

Также попробовал следующее без успеха: Uri uri = new Uri ("pack: // application: ,,,/Images/bullet_red.png"); BitmapImage source = new BitmapImage (uri); источник возврата; – user773456

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

+0

@Evert, у меня нет опыта с элементами управления telerik, но кажется, что у используемой сетки должна быть какая-то «колонка изображения». Вероятно, вы можете google для документации/учебников по этому типу столбца, и это поможет вам реализовать желаемое поведение. – Snowbear

+2

В SilverLight нет DataTriggers – Notter

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