簡體   English   中英

WP7序列化類的最佳實踐[就是它的完成方式]

[英]Best practice for WP7 serializeable class [is that the way its done]


我試圖讓這個基本類正確,它應該做以下事情:

  • 有一個字符串列表,每秒創建一個新字符串。
  • 有一個當前字符串,表示當前字符串(在本例中是最后創建的)
  • 使用可觀察集合進行數據綁定支持

該類的代碼如下所示,整個項目可以在以下鏈接中找到:
http://www.filesavr.com/XXRM3TJ9LSW6FEC

任何使這個更好的方法,或者它“盡可能好”。

謝謝,克里斯

PS:我知道,這不是一個真正的問題,但如果我將基於這個設計的很多課程,那么我想確保不重復錯誤。 我雖然創建了我自己的可觀察集合,它支持“當前”和序列化,但我對泛型屬性有點掙扎。 你會創建一個,還是使用我在下面的例子中使用的方法?

[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;
}

事實證明,二進制序列化比數據協定序列化器快得多,因此您可能需要考慮該選項。 凱文馬歇爾有一個很棒的帖子: http//blogs.claritycon.com/kevinmarshall/2010/11/03/wp7-serialization-comparison/

您可能會發現我們在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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM