Warm tip: This article is reproduced from serverfault.com, please click

c#-根据绑定的布尔值更改图像源

(c# - Change the image source based on binded boolean)

发布于 2016-08-05 13:42:59

我有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>

我在这里做错了什么?

Questioner
Stefan
Viewed
1
M. Pipal 2016-08-05 22:27:48

创建一个转换器:

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}"}" />