通知更改自定义绑定的图像源 class 属性
Notify change on Image source binded on custom class property
我在使用简单的图像源绑定时遇到问题。
我有一个 class 存储图像文件(和其他东西)的路径,如下所示:
public class Ekta {
...
public string PATHMED { get; set; }
public string FICMED { get; set; }
public string FULLPATH { get { return PATHMED + FICMED; } }
...
}
我的 window 中有以下 属性:
public Ekta mainImg { get; set; }
而在xaml中,绑定是这样完成的:
<Image Source="{Binding Path=mainImg.FULLPATH}"/>
当我第一次设置 mainImg
的值时(在调用 InitializeComponent()
之前),这很好用,但是当我更新它时(mainImg = e;
其中 e
是 Ekta
) 的一个实例 UI 没有改变。
我错过了什么吗?将图像源绑定到自定义项是否正确?
我建议创建一个名为 Notifier
的基础 class 并将其用于任何需要 INotifyPropertyChanged
实施的 class
public class Notifier : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后
public class Ekta : Notifier
{
private string _PATHMED;
public string PATHMED
{
get { return _PATHMED; }
set
{
_PATHMED = value;
RaisePropertyChanged();
RaisePropertyChanged("FULLPATH");
}
}
private string _FICMED;
public string FICMED
{
get { return _FICMED; }
set
{
_FICMED = value;
RaisePropertyChanged();
RaisePropertyChanged("FULLPATH");
}
}
public string FULLPATH
{
get { return PATHMED + FICMED; }
}
}
我在使用简单的图像源绑定时遇到问题。
我有一个 class 存储图像文件(和其他东西)的路径,如下所示:
public class Ekta {
...
public string PATHMED { get; set; }
public string FICMED { get; set; }
public string FULLPATH { get { return PATHMED + FICMED; } }
...
}
我的 window 中有以下 属性:
public Ekta mainImg { get; set; }
而在xaml中,绑定是这样完成的:
<Image Source="{Binding Path=mainImg.FULLPATH}"/>
当我第一次设置 mainImg
的值时(在调用 InitializeComponent()
之前),这很好用,但是当我更新它时(mainImg = e;
其中 e
是 Ekta
) 的一个实例 UI 没有改变。
我错过了什么吗?将图像源绑定到自定义项是否正确?
我建议创建一个名为 Notifier
的基础 class 并将其用于任何需要 INotifyPropertyChanged
实施的 class
public class Notifier : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后
public class Ekta : Notifier
{
private string _PATHMED;
public string PATHMED
{
get { return _PATHMED; }
set
{
_PATHMED = value;
RaisePropertyChanged();
RaisePropertyChanged("FULLPATH");
}
}
private string _FICMED;
public string FICMED
{
get { return _FICMED; }
set
{
_FICMED = value;
RaisePropertyChanged();
RaisePropertyChanged("FULLPATH");
}
}
public string FULLPATH
{
get { return PATHMED + FICMED; }
}
}