Я пытаюсь понять этот базовый класс правильно, он должен делать следующее:
- Иметь список строк, где каждую секунду создается новая строка.
- Иметь текущую строку, которая представляет текущую строку (в данном случае последний созданный)
- Использование наблюдаемой коллекции для поддержки связывания данных
Код для класса выглядит следующим образом, весь проект можно найти по этой ссылке:
http://www.filesavr.com/XXRM3TJ9LSW6FEC
Любой способ сделать это лучше, или это "так хорошо, как есть".
Спасибо,
Chris
PS: Я знаю, это не настоящий вопрос, но если я буду основывать много уроков на этом дизайне, я хочу быть уверенным, что не буду дублировать ошибки. Я думал о создании своей собственной наблюдаемой коллекции, которая поддерживает «current» и сериализацию, но я немного борюсь с родовым атрибутом. Вы бы его создали или использовали подход, который я использовал в приведенном ниже примере?
[DataContract]
public class SerializerTest : INotifyPropertyChanged
{
private DispatcherTimer _dT;
private List<string> _strings;
public static string Key { get{return typeof (SerializerTest).FullName;} }
[DataMember]
public List<string> Strings
{
get
{
return _strings;
}
set
{
_strings = value;
StringsObservable = new ObservableCollection<string>();
foreach (var s in _strings) StringsObservable.Add(s);
}
}
[DataMember]
public int CurrentStringIndex { get; set; }
public ObservableCollection<string> StringsObservable { get; set; }
public string CurrentString
{
get
{
if (Strings == null) return null;
if (Strings.Count <= CurrentStringIndex) return null;
return Strings[CurrentStringIndex];
}
}
public SerializerTest()
{
Strings = new List<string>();
StringsObservable = new ObservableCollection<string>();
InteralInit();
}
[OnDeserialized]
public void Init(StreamingContext c)
{
InteralInit();
}
private void InteralInit()
{
_dT = new DispatcherTimer();
_dT.Tick += (a, b) => AddString();
_dT.Interval = new TimeSpan(0, 0, 0, 2);
_dT.Start();
}
public void AddString()
{
Strings.Add(DateTime.Now.ToLongTimeString() + ":" + DateTime.Now.Millisecond);
StringsObservable.Add(Strings.Last());
CurrentStringIndex = Strings.Count - 1;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(""));
}
public event PropertyChangedEventHandler PropertyChanged;
}