2010-05-18 3 views
2

이것은 내 xaml 코드입니다. 데이터베이스에서DataGrid in.cs에 대한 이미지를 동적으로 바인딩하는 방법

<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 

여기

내가 DataGrid에 대한 이러한 값을 결합하고 무엇입니까. 난 할 일이 까다로운 있습니다. 레벨에 따라 바인딩 수준이 1이면 바인딩 이미지 이어야하며 이미지를 바인드해야합니다. 레벨 값이 0이면 해당 행의 이미지를 바인드하지 마십시오.

저는 이것이 어떻게 처리해야하는지 알고 있지만 어떤 이벤트에서이 코드를 작성해야합니까?

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

185 개 질문에 48 %? 만족스런 답을 얻지 못했던 90 가지 정도의 질문이 있습니까? – AnthonyWJones

답변

2

값 변환은 다음과 같습니다

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

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

어떤 도움이 사전에 큰 감사

+0

BitmapImage/Source 등을 반환하기 위해 ImageConverter를 만들려고 애썼지 만이 방법을 사용하면 6 개 이상의 이미지를 동적으로 넣을 수 있습니다. 감사!! –

0

놓습니다 XAML에서 이미지와는 이런 IValueConverter와 수준으로 Visibility 속성의 바인딩 할 것 당신이 레벨이 0과 1 이상이라고 가정하면, 당신은 이후의 아이템입니다. 그렇지 않으면 부울 값을 사용했을 것입니다.

여기 값 converte가 있습니다. R : - UserControl을 자원에서

[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.Resources> 
    <local:IndexToObjectConverter x:Key="LevelToImage"> 
     <BitmapImage /> 
     <BitmapImage UriSource="Test.png" /> 
    </local:IndexToObjectConverter> 
</UserControl.Resources> 

을 지금과 같이 이미지 컨트롤의 Source 속성을 바인딩 할 수 있습니다 : -

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

이제 새로운 레벨 번호를 만들면서 요소를 변환기에 추가 할 수 있습니다.

현재, Button 안에 TextBlockImage이있는 것으로 보입니다. Button은 단일 오브젝트 만 보유 할 수 있으므로이 두 패널을 Grid과 같은 일부 패널 안에 래핑해야합니다.

관련 문제