【问题标题】:Image Binding to string图像绑定到字符串
【发布时间】:2014-02-18 12:40:13
【问题描述】:

我无法显示此位置 Resources/Images/abc.png 中的图像。

这是我正在做的:

public class A
    {
private string image;
public string Image
        {
            get { return image; }
            set
            {
                if (value != this.image)
                {
                    image = value;
                }
            }
        }

}

在我的 .CS 文件中:

if (somecondition)
                    {
                        a.Image = @"Resources/Images/abc.png";
                    }

在我的 XAML 文件中:

 <DataTemplate x:Key="TopicDataTemplate" >
<Image Stretch="None" 
                               Grid.Row="1"
                               Source="{Binding Image}"/>
</DataTemplate>

但它不显示图像,如何解决这个问题?我在这里做错了什么?

【问题讨论】:

  • 你所说的资源是指文件夹还是应用资源
  • 默认情况下有一个名为 Resources 的文件夹,我在其中添加了图像
  • 您的Image 属性缺少属性更改通知机制。考虑在 A 类中实现INotifyPropertyChanged 接口。
  • @Clemens 他在第一次绑定时不会这样做
  • @alnaji 这是一个数据模板,这就是为什么我无法在 CS 文件中获取图像名称的引用。

标签: c# wpf image windows-phone-8 windows-phone


【解决方案1】:

您的图像路径应该没问题,前提是您的 Visual Studio 项目中另一个名为 Resources 的文件夹中名为 Images 的文件夹中实际上有一个名为 abc.png 的文件,并且它的 Build Action 设置为 Resource(这是默认值)。

更新我不确定上述情况是否也适用于 Windows Phone。我猜想从字符串到 ImageSource 的默认转换在该平台上可能不如 WPF 中那样强大。


但是,在任一平台上,如果要在运行时更改 Image 属性,则需要实现属性更改机制,通知数据绑定 Image 属性已更改。一种方法是在您的 A 类中实现 INotifyPropertyChanged 接口:

public class A : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string image;
    public string Image
    {
        get { return image; }
        set
        {
            image = value;
            RaisePropertyChanged("Image");
        }
    }

    protected void RaisePropertyChanged(string propertyName)
    {
        var propertyChanged = PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

显然还需要正确设置Image 绑定,即模板项的DataContext 包含对A 类实例的引用。

【讨论】:

  • 仍然没有变化,它不显示来自位置 Resources/Images/abc.png 的图像
  • 你是否正确设置了绑定源对象,即模板化控件或项的DataContext?
  • 您可能必须将ms-appx Uri prefix 添加到您的图像路径中。也见this question
  • @Clemens 我的错 - 它也应该与字符串一起使用,因为我已经对其进行了测试(我必须更新我的信息)。很抱歉造成混乱。而且我认为 OP 在添加此标签时会询问 WP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2013-05-16
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多