Silverlight привязывает изображение к целому числу - PullRequest
1 голос
/ 22 марта 2011

У меня эта проблема уже давно.И все же я не знаю, как это исправить ... Я пытаюсь привязать изображение к значению в моей сетке данных.

Поле называется 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

Ответы [ 2 ]

1 голос
/ 22 марта 2011

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

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

 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();
        }
    }

Эта обложка вернет изображения

Ваш 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 голосов
/ 22 марта 2011

Прежде всего, почему вы хотите привязать его к столбцу 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...