protected override void SetStringValue(string value) { var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(value); var globalMail = Constants.LoadMail(xmlDoc); this.Mail = new ObservableCollection <MailItemViewModel>(globalMail.Select(kvp => new MailItemViewModel(kvp.Key, kvp.Value))); this.SelectedMail = this.Mail.FirstOrDefault(); }
private void MailCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { for (var i = 0; i < this.Mail.Count; i++) { this.Mail[i].Index = i; } if (e.Action == NotifyCollectionChangedAction.Add) { foreach (var newObject in e.NewItems) { var newMessage = newObject as MessageViewModel; if (newMessage != null) { newMessage.PropertyChanged += this.MailIsDirtyChanged; } } } if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (var oldObject in e.OldItems) { var oldMessage = oldObject as MessageViewModel; if (oldMessage != null) { oldMessage.PropertyChanged -= this.MailIsDirtyChanged; } } } if (!this.Mail.Contains(this.SelectedMail)) { this.SelectedMail = this.lastSelectedIndex < this.Mail.Count && this.lastSelectedIndex >= 0 ? this.Mail[this.lastSelectedIndex] : this.Mail.LastOrDefault(); } this.OnPropertyChanged(nameof(this.Mail)); this.OnPropertyChanged(nameof(this.IsDirty)); }