public void TestRemoveNotifiesBoundLists() { const int key = 0; const string item = "item"; bindableStringDictionary.Add(key, item); var listA = new BindableDictionary <int, string>(); listA.BindTo(bindableStringDictionary); var listB = new BindableDictionary <int, string>(); listB.BindTo(bindableStringDictionary); var listC = new BindableDictionary <int, string>(); listC.BindTo(bindableStringDictionary); bindableStringDictionary.Remove(key); Assert.Multiple(() => { Assert.False(listA.Contains(key)); Assert.False(listB.Contains(key)); Assert.False(listC.Contains(key)); }); }
public void CheckLyrics(List <Lyric> lyrics, LyricCheckProperty checkProperty = LyricCheckProperty.All) { if (lyrics == null) { throw new ArgumentNullException(nameof(lyrics)); } if (lyricChecker == null) { throw new NullReferenceException(nameof(lyricChecker)); } // re-calculate and add foreach (var lyric in lyrics) { // create report record if not have. if (!BindableReports.Contains(lyric)) { BindableReports.Add(lyric, new LyricCheckReport(lyric)); } var report = BindableReports[lyric]; if (checkProperty.HasFlag(LyricCheckProperty.Time)) { report.TimeInvalid = lyricChecker.CheckInvalidLyricTime(lyric); } if (checkProperty.HasFlag(LyricCheckProperty.TimeTag)) { report.InvalidTimeTags = lyricChecker.CheckInvalidTimeTags(lyric); } if (checkProperty.HasFlag(LyricCheckProperty.Ruby)) { report.InvalidRubyTags = lyricChecker.CheckInvalidRubyTags(lyric); } if (checkProperty.HasFlag(LyricCheckProperty.Romaji)) { report.InvalidRomajiTags = lyricChecker.CheckInvalidRomajiTags(lyric); } } }