繁体   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