C# 如何基于绑定值-UWP更改listview项的图像
我有一个listview,它使用可观察集合绑定值。listview包含一个带有图像和文本的按钮。基于文本值,我想改变按钮的背景色,还需要改变图像的来源。我怎样才能做到这一点C# 如何基于绑定值-UWP更改listview项的图像,c#,xaml,listview,uwp,C#,Xaml,Listview,Uwp,我有一个listview,它使用可观察集合绑定值。listview包含一个带有图像和文本的按钮。基于文本值,我想改变按钮的背景色,还需要改变图像的来源。我怎样才能做到这一点 <ListView ItemsSource="{x:Bind ShopArray}"> <ListView.ItemTemplate> <DataTemplate x:DataType="local:CurrentShopList2"> &l
<ListView ItemsSource="{x:Bind ShopArray}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:CurrentShopList2">
<Button Background="Green" >
<Grid>
<TextBlock Foreground="Black" FontWeight="Bold" Text="{x:Bind IsBooksAvailable}"/>
<Image Source="/Assets/booksAvailable.png" Stretch="None" />
</Grid>
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如果
IsBooksAvailable=“Yes”
,我想将按钮的背景色更改为绿色,将图像源更改为/Assets/booksAvailable.png
。如果的值为IsBooksAvailable=“No”
我想将按钮的背景色更改为红色并隐藏图像按钮。对于按钮,您需要一个IValueConverter。应该是这样的:
public class BoolToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if ((bool)value)
return new SolidColorBrush(Color.FromArgb(255, 0, 255, 0));
else
return new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
将按钮的颜色属性绑定到此转换器提供的ISBooks
对于图像,可以执行相同的操作,将源属性绑定到文本字段,并在必要时使用转换器将文本调整为正确的路径。
但我更喜欢将图像存储在ObservaleCollection的byte[]属性中,并使用ByteArrayToImageConverter 这是另一种溶液——用XAML制成的纯溶液。除了上述行为外,还可以使用VisualStateManager执行此操作:
您可以查看整个示例。Hi nsds:查看一下=>这里的(bool)值是多少?如何检查文本“是”或“否”?您可以将按钮的背景属性绑定到IsBooksAvailable。这毫无意义,因为布尔不能是画笔。所以我们使用一个转换器。在convert方法中,该值是绑定到的值,在本例中是可用的。值是一个对象,所以我们必须将它转换为布尔值。然后,如果为真,则返回绿色,如果为假,则返回红色。这就是xaml中的按钮应该是什么样子:但是请注意,您必须在xamlIn的资源中定义转换器。我的案例“是”或“否”不是布尔值。它们是字符串值。在“if((bool)value)”的位置,我想检查它是否等于“Yes”/“No”。哦,对不起,我假设它是bool。因此,您只需转换为字符串并写入:if((string)value==“Yes”)。转换器的其余部分可以相同,但我建议捕获null和一个不是“yes”或“no”的字符串
<ListView ItemsSource="{x:Bind ShopList}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:ShopItem">
<UserControl>
<Button Click="Button_Click">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="AvailableStates">
<VisualState x:Name="Default"/>
<VisualState x:Name="Available">
<VisualState.Setters>
<Setter Target="ItemGrid.Background" Value="Green"/>
<Setter Target="ItemImage.Source" Value="/Assets/Tick.png"/>
</VisualState.Setters>
<VisualState.StateTriggers>
<StateTrigger IsActive="{x:Bind IsBookAvailable, Mode=OneWay}"/>
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="ItemGrid">
<TextBlock Foreground="Black" FontWeight="Bold" Text="{x:Bind Title}"/>
<Image x:Name="ItemImage" Source="/Assets/NotAvailable.png" Stretch="None" />
</Grid>
</Button>
</UserControl>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>