我想根据这些项的属性更改ListView中某些项的前景。如果该物品具有属性" EsBlacklist"设置为true,其前景应为红色。
<Page.Resources>
<converter:ForegroundColorConverter x:Key="ForegroundConverter" x:Name="ForegroundConverter"/>
</Page.Resources>
<StackPanel Grid.Column="1" Grid.Row="1">
<TextBlock HorizontalAlignment="Center" Margin="10" FontSize="24">Vehículos sin VTV</TextBlock>
<ListView ItemsSource="{x:Bind ViewModel.PatentesSinVtv}" Margin="10" DisplayMemberPath="Placa"
SelectedItem="{x:Bind ViewModel.PatenteSeleccionada, Mode=TwoWay}"
HorizontalAlignment="Center"
IsItemClickEnabled="False"
IsSwipeEnabled="False"
CanDragItems="False"
SelectionMode="Single"
Grid.Column="1"
Grid.Row="1">
<ListViewItem Foreground="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource ForegroundConverter}}"></ListViewItem>
( Self should reference the item and not ListViewItem.)
</ListView>
</StackPanel>
转换器:
class ForegroundColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var patente = (Patente)value; //value is not a Patente but ListViewItem
return patente.EsBlacklist ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Gray);
}
}
我的问题是&#34;价值&#34;在转换器中收到的不是Patente而是ListViewItem
答案 0 :(得分:1)
我的问题是转换器中收到的“值”不是Patente而是ListViewItem
作为{RelativeSource} markup extension的文件,
{RelativeSource Self}生成Self Mode值。目标元素应该用作此绑定的源。这对于将元素的一个属性绑定到同一元素上的另一个属性非常有用。 ...
自我模式可用于将元素的一个属性绑定到同一元素上的另一个属性,并且是ElementName绑定的变体,但不需要命名,然后自引用该元素。
以下是使用RelativeSource={RelativeSource Self}
,
<Rectangle
Fill="Orange" Width="200"
Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"/>
您可以查看该文档以了解如何使用{RelativeSource} markup extension
您可以直接绑定ViewModel以使转换器成为Patente,
<ListViewItem Foreground="{x:Bind ViewModel, Mode=TwoWay, Converter={StaticResource ForegroundConverter}}"/>
答案 1 :(得分:0)
前景色的值不是纯色,而是画笔。
因此,您的转换器应返回new SolidColorBrush(Colors.Red)
。
答案 2 :(得分:0)
您可以这样处理:
<ListViewItem>
<ListViewItem.Foreground>
<SolidColorBrush Color="{x:Bind YourColor}"/>
</ListViewItem.Foreground>
</ListViewItem>
答案 3 :(得分:0)
我需要实现一个ItemTemplate
<ListView.ItemTemplate>
<DataTemplate x:DataType="modelo:Patente">
<TextBlock Text="{Binding Placa}" Foreground="{x:Bind EsBlacklist, Mode=TwoWay, Converter={StaticResource ForegroundConverter}}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
并且转换器变为:
public object Convert(object value, Type targetType, object parameter, string language)
{
return (bool)value? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Gray);
}