Проблема в том, что каждое значение в 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
}
Я думаю с помощью IValueConverter, соответствующее решение. Вы могли сделать HexConverter, который преобразовывает строковое шестнадцатеричное значение в Цвет. Та ссылка должна запустить Вас.
Вы захотите использовать Стиль для привязки Истории 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 для парсинга ее как шестнадцатеричного числа.