我正在开发一个WPF数据网格自定义控件,其中我每周每天都有一个Day列,每天每小时有24列,我将这些值保存在七个不同列中的数据库中(每周一天)和这些列的数据类型是二进制(3)(3字节* 8位= 24),每小时1位,我的意图是以某种方式绑定网格,因此网格的每个单元格根据位值将其颜色更改为红色/绿色那小时(红色代表0,绿色代表1),但我不知道从哪里开始。
循环不是优先考虑的,但如果没有出路,那么我也应该继续这样做。
请帮助。
答案 0 :(得分: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,所以我为任何语法错误道歉。