Как динамически связать изображение для сетки данных в .cs - PullRequest
2 голосов
/ 18 мая 2010

это мой код xaml.

 <sdk:DataGrid x:Name="dgMarks"  CanUserResizeColumns="False"  SelectionMode="Single"   AutoGenerateColumns="False" VerticalAlignment="Top" IsReadOnly="True"  Margin="13,44,0,0" RowDetailsVisibilityChanged="dgMarks_RowDetailsVisibilityChanged"    RowDetailsVisibilityMode="Collapsed" Height="391" HorizontalAlignment="Left" Width="965" SelectionChanged="dgMarks_SelectionChanged"  VerticalScrollBarVisibility="Visible" >
            <sdk:DataGrid.Columns>
                <sdk:DataGridTemplateColumn>
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button x:Name="myButton"   
                            Click="ExpandMarks_Click">
     <TextBlock Text="{Binding Level}" TextWrapping="NoWrap"  ></TextBlock>
                                <Image  x:Name="imgMarks"  Stretch="None"/>
                            </Button>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn  Header="Name" Visibility="Collapsed">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate >
                            <sdk:Label Content="{Binding Name}"/>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>

                <sdk:DataGridTemplateColumn  Header="Marks" Width="80">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
   <sdk:Label Content="{Binding Marks}"/>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>
 </sdk:DataGrid>

из базы данных я получаю эти значения

 name   marks   Level
abc     23       0
xyz     67       1
yu     56        0
aa     89        1

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

я знаю, что это то, как мы должны обращаться, но где я должен написать этот код, в каких событиях?

Image imgLevel = (Image)templateTrendScore.FindName("imgMarks");

if (level1==1)
{
  imgLevel .Source = new BitmapImage(new Uri("/Images/image1.JPG", UriKind.Relative));
}

любая помощь была бы велика, спасибо заранее

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Преобразователь значений - это элемент, за которым вы работаете, при условии, что у вас больше 0 и 1 для уровня (иначе вы бы использовали логическое право?)

Вот преобразователь значения: -

[ContentProperty("Items")]
public class IndexToObjectConverter : IValueConverter
{
    private readonly ObservableCollection<object> myCol = new ObservableCollection<object>();

    public ObservableCollection<object> Items { get { return myCol; } }

    #region IValueConverter Members

    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Items[(int)value];
    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException("This converter only works for one way binding");
    }

    #endregion
}

В ресурсах usercontrol у вас будет это: -

<UserControl.Resources>
    <local:IndexToObjectConverter x:Key="LevelToImage">
        <BitmapImage />
        <BitmapImage UriSource="Test.png" />
    </local:IndexToObjectConverter>
</UserControl.Resources>

Теперь вы можете привязать свойство Source элемента управления Image следующим образом: -

<Image Source="{Binding Level, Converter={StaticResource LevelToImage}}" />

Теперь, когда вы изобретаете новые номера уровней, вы можете добавлять элементы в конвертер.

Кстати, у вас, похоже, есть TextBlock и Image внутри Button. Button может содержать только один объект, поэтому вам нужно обернуть эти два элемента внутри какой-либо панели, например Grid.

0 голосов
/ 19 мая 2010

Поместите изображение в xaml, а затем привяжите его свойство Visibility к Уровню с помощью IValueConverter следующим образом:

public class LevelToVisibilityConverter : IValueConverter
{
    /// <exception cref="ArgumentException">TargetType must be Visibility</exception>
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if(!(value is int))
            throw new ArgumentException("Source must be of type int");

        if(targetType != typeof(Visibility))
            throw new ArgumentException("TargetType must be Visibility");

        int v = (int) value;

        if (v == 1)
            return Visibility.Visible;
        else
            return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...