WPF: Привязка цвета фона listviewitem к шестнадцатеричному Свойству строки объекта

Проблема в том, что каждое значение в entryParameters является словарем, поэтому, когда вы делаете entryParameters.forEach, вы получаете тип словаря в замыкании, а не (key, value).

Вы получите (key,value) при вызове forEach в этом словаре. Итак, ваш метод должен выглядеть примерно так:

func getIndices(with source: [String], in entryParameters: [[String:Any]]) -> [String:[Int:Any]] {
    var indices = [String:[Int:Any]]()
    source.forEach { item in indices[item] = [Int:Any]() }

    var index = 0
    entryParameters.forEach { entry in
        entry.forEach {(arg: (key: String, value: Any)) in
            let (key, value) = arg
            indices[key]?[index] = value
        }

        index += 1
    }

    return indices
}
5
задан Robin 11 December 2008 в 18:27
поделиться

2 ответа

Я думаю с помощью IValueConverter, соответствующее решение. Вы могли сделать HexConverter, который преобразовывает строковое шестнадцатеричное значение в Цвет. Та ссылка должна запустить Вас.

2
ответ дан 14 December 2019 в 04:49
поделиться

Вы захотите использовать Стиль для привязки Истории ListViewItem к объекту для строки. Объектом является DataContext по умолчанию ListViewItem, таким образом, это должно быть просто:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:sys="clr-namespace:System;assembly=mscorlib"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid.Resources>
        <x:Array x:Key="colors" Type="{x:Type sys:String}">
            <sys:String>Red</sys:String>
            <sys:String>Yellow</sys:String>
            <sys:String>#0000FF</sys:String>
        </x:Array>
    </Grid.Resources>
    <ListView ItemsSource="{StaticResource colors}">
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Background" Value="{Binding .}"/>
            </Style>
        </ListView.Resources>
    </ListView>
</Grid>

Вместо того, чтобы связать с целым объектом Вы свяжете с BackgroundColor, но это должно быть подобно вышеупомянутому. Вы имеете, должны использовать преобразователь с привязкой для добавления префикса "#", это - сигнал к встроенному BrushConverter для парсинга ее как шестнадцатеричного числа.

6
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: