2013-02-01 3 views
0

내 DataGrid의 각 행에 아이콘을 추가하고 싶습니다. 열이 자동으로 생성되고 첫 번째 열에 아이콘을 표시하는 datagridtemplatecolumn이있는 열이 추가되었습니다.WPF DataGrid에 아이콘 추가하기

이 아이콘을 표시하는 내 XAML 코드 :

<DataGrid ItemsSource="{Binding User.myDataTable}" IsReadOnly="True" FrozenColumnCount="1"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn x:Name="IconHeader" Header="" CanUserResize="False"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Image Source="myImage" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

잘 작동합니다. 이제 행의 한 열에 조건이 true이면 아이콘을 변경하고 싶습니다. 예 : . 열 11이 값 "true"이면 아이콘 1이고 값이 "false"이면 icon2입니다.

이 작업을 수행하기 위해 DataGrid의 loadingrow 이벤트를 사용할 수 있습니까? 어떻게하면 mvvm에서이를 수행 할 수 있습니까? 아니면 이런 식으로 할 수있는 또 다른 방법이 있습니까?

답변

1

여기에 가장 간단한 일은 열 데이터 바인딩에 따라 발광하는 당신의 CellTemplate에서 DataTrigger를 사용할 수 있습니다 :

<DataTemplate> 
    <Image Source="myImage1" x:Name="img" /> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=[11]}" Value="False"> 
      <Setter TargetName="img" Property="Source" Value="myImage2" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

의 DataRow는 열을 얻기를위한 INT 및 문자열 인덱서 모두 가지고 인덱스 또는 이름으로 바인딩 경로에 대해 []을 열 인덱스 ([3]) 또는 열 이름 ([MyColumn])과 함께 사용할 수 있습니다.

+0

어떻게하면 column11 속성에 바인딩 할 수 있습니까? 내 열은 자동으로 생성됩니다. – user2025830

+0

질문이 없었기 때문에 사용할 이미지를 결정할 때 사용할 부울 속성의 자리 표시 자입니다. 어떤 데이터 보여줍니다. –

+0

내 데이터는 MSSQL Server에서 storedprocedure에서 왔어. 내 모델에서 나는 storedprocedure와이 데이터로 채워지는 datatable을 가지고있다. 테이블은 DataGrid의 itemssource에 바인드됩니다. 그래서 나는 이미지 1 또는 2 사이의 결정을 내리는 방법을 모른다. – user2025830

0

저는 IValueConverter를 구현하는 것이 가장 좋은 방법이라고 생각합니다. column11이 true이면 한 이미지를 표시하고, false이면 다른 이미지를 표시합니다.

IValueConverter : 같은 http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

뭔가 :

public class IconConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    if ((bool)value == true) 
    { 
     // column11 = true, so show icon 1 
     return image1; 
    } 
    else 
    { 
     return image2; 
    } 
    } 
} 
0

이 컨버터를위한 작업 같은 소리. 그냥 당신이 원하는 속성에 이미지의 소스 속성을 바인딩 :

<Image Source="{Binding Path=BoolProp, Converter={StaticResource BoolToImageConv}}" 

귀하의 컨버터가 당신의 윈도우의 자원에

public class BoolToImageConverter:IValueConverter 
{ 
    public string FalsePath { get; set; } 
    public string TruePath { get; set; } 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (System.Convert.ToBoolean(value)) 
     { 
      return new BitmapImage(new Uri(TruePath)); 
     } 
     return new BitmapImage(new Uri(FalsePath)); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

처럼 보일 수/UserControl을 당신은 당신의 변환기를 참조해야합니다.

<Window.Resources> 
    <conv:BoolToImageConverter FalsePath="pathforimageiffalse" TruePath="pathforimageiftrue" x:Key="BoolToImageConv"/> 
</Window.Resources> 
+0

내 창에 xmlns 네임 스페이스를 추가해야하는 방법을 알려주시겠습니까? – user2025830

+0

물론 :'xmlns : conv = "clr-namespace : ApplicationName.FolderName"'다른 어셈블리에있는 경우 : xmlns : conv = "clr-namespace : ApllicationName.FolderName; assembly = AssemblyName" 형식 xmlns : conv = "intellisense 나머지를 수행해야합니다 ^^ –

+0

죄송하지만 다시 물어 봐야합니다 : 폴더 변환기에 BoolToImageConverter 클래스를 추가했습니다. 이제 네임 스페이스 xmlns : conv ="clr-namespace : WPF.Converter "하지만 conv : BoolToImageConverter가 네임 스페이스에 없습니다. 뭐가 잘못 되었습니까? – user2025830