我的C#代码存在一个小问题,并且绑定了一个属性。
这里我有以下xaml:
<Image Source="{Binding downloaded, Source={StaticResource itemsViewSource}}" Width="20" Height="20" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Top"/>
还有我正在尝试的代码:
class Ressource : INotifyPropertyChanged
{
public String downloaded { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
Debug.WriteLine("Property changed.");
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
我的问题是调用了NotifyPropertyChanged函数(调试出现),字符串内容被更改但我看不到我的图像。
有没有人能解决这个问题。
谢谢!
编辑: 在多个有用的答案之后,即使调用了propertyChanged函数也没有出现变化,我开始怀疑是否真的可能改变图像源的路径。
路径更改后可以更新图像吗?
以下是建议更改后的代码:
public class Ressource : INotifyPropertyChanged
{
public String downloaded
{
get
{
return _downloaded;
}
set
{
_downloaded = value;
if (PropertyChanged != null)
PropertyChanged(this,new PropertyChangedEventArgs("downloaded"));
}
}
答案 0 :(得分:2)
您应该更改属性声明,以便可以在View Model中通知视图更改了源属性,并更新控制通知属性的值。
private String _downloaded;
public String downloaded
{
get
{
return _downloaded;
}
set
{
_downloaded = value;
NotifyPropertyChanged("downloaded");
}
}
答案 1 :(得分:0)
C#View模型源代码是
class Ressource : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private String _downloaded;
public string downloaded
{
get { return _downloaded; }
set
{
_downloaded= value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("downloaded"));
}
}
}
答案 2 :(得分:0)
只有在辅助功能级别为public
时才能应用数据绑定。类的默认可访问级别为internal
。您尚未应用辅助功能级别,因此您的班级Ressource
是内部的。设为public
,它应该有效。
public class Ressource : INotifyPropertyChanged
更新1:
如果您的图片已设置为构建操作Resource
,则可以尝试使用此字符串:"/AssemblyName;component/Assets/available.png"
。
或.Net Framework 4.5:
"pack://application:,,,/AssemblyName;component/Assets/available.png"
将AssemblyName
替换为您的程序集名称(您可以使用Assembly.GetExecutingAssembly().GetName().Name
动态获取程序集名称)
答案 3 :(得分:0)
将UpdateSourceTrigger = PropertyChanged添加到绑定。
答案 4 :(得分:0)
好的,这是一个新手的错误,但我更喜欢显示问题是什么,因为我没有找到解释可能出现问题的主题。 但是我自己发现了......我想没有人真的需要它。无论如何:
我还不够清楚。 在我的示例中,我将图像源绑定到Resource类中的下载字段。
问题是资源对象包含在另一个没有实现INotifyPropertyChanged的类中。
有一次,一切正常。
感谢大家一个试图帮助我的人,抱歉为这个小说和缺乏清晰度。
如果有人在努力解决此问题,请执行以下代码:
资源的一部分:
public class Ressource : INotifyPropertyChanged
{
private String _downloaded;
public String downloaded
{
get { return this._downloaded; }
set
{
this._downloaded = value;
raiseProperty("downloaded");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void raiseProperty(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
容器:
class personalSeance : INotifyPropertyChanged
{
public ObservableCollection<Ressource> listRess { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void raiseOnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
最简单的绑定:
<Image Source="{Binding downloaded}" Width="20" Height="20" Margin="3" HorizontalAlignment="Right" VerticalAlignment="Top"/>