Лучшая практика для сериализуемого класса WP7. - PullRequest
0 голосов
/ 02 марта 2011


Я пытаюсь понять этот базовый класс правильно, он должен делать следующее:

  • Иметь список строк, где каждую секунду создается новая строка.
  • Иметь текущую строку, которая представляет текущую строку (в данном случае последний созданный)
  • Использование наблюдаемой коллекции для поддержки связывания данных

Код для класса выглядит следующим образом, весь проект можно найти по этой ссылке:
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;
}

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Вам могут пригодиться наши статьи по сериализации в двоичном формате на Windows Phone 7:

http://verysoftware.co.uk/blog/serializing-to-binary-on-wp7-part1/
http://verysoftware.co.uk/blog/serializing-to-binary-on-wp7-part2/

1 голос
/ 02 марта 2011

Двоичная сериализация оказалась намного быстрее, чем сериализатор с контрактом данных, поэтому вы можете рассмотреть этот вариант.У Кевина Маршалла есть отличный пост на эту тему: http://blogs.claritycon.com/kevinmarshall/2010/11/03/wp7-serialization-comparison/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...