Связывание данных с двоичными значениями - PullRequest
1 голос
/ 18 ноября 2011

Я работаю над пользовательским элементом управления таблицы данных WPF, где у меня есть столбец «День» для каждого дня недели и 24 столбца для каждого часа в день, я сохраняю эти значения в базе данных в семи различных столбцах (каждый день в неделю) и тип данных для этих столбцов - Binary (3) (3 байта * 8 бит = 24), 1 бит на каждый час, я намерен как-то привязать сетку, чтобы каждая ячейка сетки меняла свой цвет на красный / зеленый в зависимости от значения бита в течение этого часа (красный для 0 и зеленый для 1), но я не знаю, с чего начать.

Зацикливание не является предпочтительным, но если нет выхода, то я должен пойти с этим также.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 18 ноября 2011

Пожалуйста, попробуйте это и дайте мне знать, если это работает для вас:

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, поэтому я прошу прощения за любую синтаксическую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...