2011-11-18 4 views
1

WPF DataGrid 사용자 정의 컨트롤에서 일하고 있습니다. 일일 열은 일주일에, 하루 24 시간은 하루에 한 번씩,이 값은 데이터베이스에 7 개의 다른 열 (각각 일 주일) 및 해당 열의 데이터 형식은 Binary (3) (3 바이트 * 8 비트 = 24), 매시간 1 비트, 그리드의 각 셀이 빨간색/그 시간의 비트 값에 기초한 녹색 (0은 빨간색, 1은 녹색). 그러나 어디서부터 시작해야할지 모르겠습니다.이진 값을 사용하는 Datagrid 바인딩

루핑은 바람직하지 않지만, 탈출구가 없다면 나는 그걸 따라 가야합니다.

친절히 도움.

답변

0

이 시도하고이 당신을 위해 작동하는지 알려 주시기 바랍니다 :

DailyValues이 정수의 배열 (매일 비트 값을 포함하는 각 정수)가 될 수 있습니다.

<UserControl.Resource> 
    <HourToBrushConverter x:Key="hourToBrushConverter" /> 
</UserControl.Resource> 


<DataGrid ItemsSource="{Binding DailyValues}" AutoGenerateColumns="False" > 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="1AM" Width="SizeToCells" IsReadOnly="True"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Rectangle Fill="{Binding . 
           Converter={StaticResource hourToBrushConverter}, 
           ConverterParameter=1}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
<DataGridTemplateColumn Header="2AM" Width="SizeToCells" IsReadOnly="True"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Rectangle Fill="{Binding . 
           Converter={StaticResource hourToBrushConverter}, 
           ConverterParameter=2}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <!-- add a column for each hour (up to 24) --> 
    </DataGrid.Columns> 
</DataGrid> 



[ValueConversion(typeof(int), typeof(Brush))] 
public class HourToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int dayValue = (int)value; 
     int hourNumber = (int)parameter; 
     int mask = GetMask(hourNumber); 

     return (dayValue & mask) > 0 ? Brushes.Green : Brushes.Red; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 

    private static int GetMask(int index) 
    { 
     return 1 << index; 
    } 
} 

지금은 Visual Studio에 액세스 할 수 없으므로 구문 실수로 사과드립니다.

+0

답장을 보내 주셔서 감사합니다. Claudiu,하지만 문제는 어떤 속성이 내가 여기에 셀 액세스 권한이 없으며 열에 배경 속성이 없습니다. –

+0

안녕하세요 MSingh 저는 바인딩 문제에 대한 해결책을 제공하기 위해 제 대답을 변경했습니다. 나는이 시간이 도움이되기를 바랍니다. –