我有Contact类:
public class Contact
{
public Contact(Contact contact)
{
this.Username = contact.Username;
this.GUID = contact.GUID;
this.Msg = contact.Msg;
this.Ring = contact.Ring;
}
public string Username { get; set; }
public Guid GUID { get; set; }
public bool Msg { get; set; }
public bool Ring { get; set; }
}
这是xaml:
<ListView Grid.Row="1" Grid.Column="0" Name="ContactsListView"
IsItemClickEnabled="True"
ItemsSource="{x:Bind m_Client.Contacts}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Contact">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind Username}" VerticalAlignment="Center" />
// HERE SHOULD BE THE <Image> THAT SHOULD BE BOUND TO THE Msg PROPERTY
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我需要完成的是,当Msg布尔值为true时,图像源为一个图像,而当Msg布尔值为false时,图像源将更改为第二个图像。
编辑: 我创建了此类:
namespace ContactsListBinding.Models
{
public class MyImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (bool)value ? new BitmapImage(new Uri("ms-appx:///Assets/true.png")) : new BitmapImage(new Uri("ms-appx:///Assets/false.png"));
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}
这是XAML:
<Page
x:Class="ContactsListBinding.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ContactsListBinding"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:data="using:ContactsListBinding.Models"
xmlns:namespace="ContactsListBinding.Models">
<Page.Resources>
<data:MyImageConverter x:Key="MyImageConverter" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" Grid.Column="0" Name="AddContactButton" Content="Add Contact" Click="AddContactButton_Click" />
<ListView Grid.Row="1" Grid.Column="0" Name="ContactsListView"
IsItemClickEnabled="True"
ItemsSource="{x:Bind m_Client.Contacts}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Contact">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind Username}" VerticalAlignment="Center" />
<Image Source="{x:Bind Msg, Converter={StaticResources MyImageConverter}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
我在这里做错了什么?
创建一个转换器:
public class MyImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (bool)value ? new BitmapImage(new Uri("trueImagePath")) : new BitmapImage(new Uri("falseImagePath"));
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
你还需要向页面添加资源:
<Page.Resources>
<namespace:MyImageConverter x:Key="MyImageConverter" />
</Page.Resources>
而不是像这样添加图像控件:
<Image Source="{x:Bind Msg, Converter="{StaticResources MyImageConverter}"}" />
我这样做了
<Page.Resources> <ContactsListBinding.Models:Converter x:Key="Converter" /> </Page.Resources>
,它说Windows Universal Project不支持Converter。我可能只是使用一些内部名称,请尝试重命名为ex。到MyImageConverter。编辑而且还必须在Page元素中添加名称空间,例如xmlns:namespace =“ yourNamespace”;如果它与您的View相同,则请使用local:MyImageConverter
史蒂芬,我希望你把正确的图像路径,而不是-
trueImagePath
和falseImagePath
我当然做到了:)检查我更新的问题,有新代码。