public class SongViewModel : INotifyPropertyChanged
{
#region Construction
/// Constructs the default instance of a SongViewModel
public SongViewModel()
{
_song = new Song { ArtistName = "Unknown", SongTitle = "Unknown" };
}
#endregion #region Members
Song _song;
#endregion #region Properties
public Song Song
{
get
{
return _song;
}
set
{
_song = value;
}
} public string ArtistName
{
get { return Song.ArtistName; }
set
{
if (Song.ArtistName != value)
{
Song.ArtistName = value;
RaisePropertyChanged("ArtistName");
}
}
}
#endregion #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion #region Methods private void RaisePropertyChanged(string propertyName)
{
// take a copy to prevent thread issues
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}在这个例子中,这个 viewmodel 类,实现了 INotifyPropertyChanged 接口,但是 它并没有实现 PropertyChanged 的监听事件处理,只是 在属性发生改变时候 调用RaisePropertyChanged(string propertyName),而这个 RaisePropertyChanged 是在PropertyChanged 不空时候 调用这个处理。我的问题是 在这个 viewmodel 属性ArtistName 改变时候,会调用 PropertyChanged ,怎样 通知到 view中的 binding ArtistName 的 控件发生改变的呢? 事实上 WPF 或silverlight 中绑定 ArtisName的 控件 确实会跟随改变
{
#region Construction
/// Constructs the default instance of a SongViewModel
public SongViewModel()
{
_song = new Song { ArtistName = "Unknown", SongTitle = "Unknown" };
}
#endregion #region Members
Song _song;
#endregion #region Properties
public Song Song
{
get
{
return _song;
}
set
{
_song = value;
}
} public string ArtistName
{
get { return Song.ArtistName; }
set
{
if (Song.ArtistName != value)
{
Song.ArtistName = value;
RaisePropertyChanged("ArtistName");
}
}
}
#endregion #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion #region Methods private void RaisePropertyChanged(string propertyName)
{
// take a copy to prevent thread issues
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}在这个例子中,这个 viewmodel 类,实现了 INotifyPropertyChanged 接口,但是 它并没有实现 PropertyChanged 的监听事件处理,只是 在属性发生改变时候 调用RaisePropertyChanged(string propertyName),而这个 RaisePropertyChanged 是在PropertyChanged 不空时候 调用这个处理。我的问题是 在这个 viewmodel 属性ArtistName 改变时候,会调用 PropertyChanged ,怎样 通知到 view中的 binding ArtistName 的 控件发生改变的呢? 事实上 WPF 或silverlight 中绑定 ArtisName的 控件 确实会跟随改变
我的问题是 viewmodel 类 实现了 INotifyPropertyChanged 接口, XAML 绑定 viewmodel 的一个属性值,它(框架) 就能知道 注册这个属性所属类 的 PropertyChanged 事件?