WPF: Ligação cor de fundo de um listviewitem a uma propriedade String hex de um objeto
-
21-08-2019 - |
Pergunta
Hey. Eu tenho um objeto que tem uma propriedade string chamada BackgroundColor. Essa seqüência é a representação hexadecimal de uma cor. Eu não posso mudar este objeto.
Estou vinculativo uma coleção desses objetos a um listView. O que eu gostaria de fazer é vincular o fundo da linha da listview para a propriedade BackgroundColor do objeto que é exibido na linha.
O que é a melhor maneira da isto?
Solução
Eu acho que usando um IValueConverter é a solução apropriada. Você poderia fazer um HexConverter que converte o valor hexadecimal string para Color. Essa ligação deve começar.
Outras dicas
Você vai querer usar um estilo para ligar o fundo de ListViewItem para o item para a linha. O item é o DataContext padrão do ListViewItem por isso deve ser simples:
<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>
Em vez de se ligar a todo o item que vai ligar ao BackgroundColor, mas deve ser semelhante ao anterior. Você tem que usar um conversor com a ligação prefixar um "#", este é o sinal para o built-in BrushConverter para analisá-lo como hex.