При реализации INotifyPropertyChanged, свойства навигации должны также реализовать это?

При реализации INotifyPropertyChanged (с использованием Prisim) приведенный ниже код имеет смысл, вы хотите знать, когда свойство изменяется.

[DisplayName("Media Type Id"), Display(Name = "Media Type Id")]
public int MediaTypeId
{
    get { return this._MediaTypeId; }
    set { this.SetProperty(ref this._MediaTypeId, value); }
}
private int _MediaTypeId;

Но я немного сбит с толку, когда речь заходит о свойствах навигации.

Я реализую это? Для меня это имело бы смысл, если бы я хотел сделать что-то вроде artist.Album = new Album();Но что, если нужно только изменить свойство, как artist.Album.name = "NEW_NAME" (при условии, Album.name инвентарь INotifyPropertyChanged) Будет ли необходим приведенный ниже код?

[DisplayName("Album"), Display(Name = "Album")]
public Album Album
{
    get { return this._Album; }
    set { this.SetProperty(ref this._Album, value); }
}
private Album _Album;

Или это будет работать так же хорошо

public virtual Album Album { get; set; }

То же самое для навигационных коллекций.

[DisplayName("Playlists"), Display(Name = "Playlists")]
public ICollection<Playlist> Playlists
{
    get { return this._Playlists; }
    set { this.SetProperty(ref this._Playlists, value); }
}
private ICollection<Playlist> _Playlists

Или же

public virtual ICollection<Playlist> Playlists { get; set; }

1 ответ

Решение

Как вы понимаете, вы реализуете INotifyPropertyChanged (INPC), чтобы пользовательский интерфейс обновлялся при изменении свойства модели. Так что в вашем случае, если у вас есть нечто, связывающее данные со свойством Album, оно должно реализовать INPC, если есть вероятность, что оно может измениться. Вместо того, чтобы использовать обычную коллекцию, у вас есть класс с именем ObservableCollection, который уже реализует INPC для вас, так что вам не нужно это делать.

Другие вопросы по тегам