using PostSharp.Patterns.Collections; using PostSharp.Patterns.Contracts; using PostSharp.Patterns.Model; using PostSharp.Patterns.Threading; using System.IO; using System.Threading; namespace PostSharp.Samples.Xaml { public class CustomerModel : ModelBase { public string FirstName { get; set; } [Required] public string LastName { get; set; } public string Phone { get; set; } public string Mobile { get; set; } public string Email { get; set; } [Child] public AdvisableCollection<AddressModel> Addresses { get; set; } [Reference] public AddressModel PrincipalAddress { get; set; } [Reader] public void Save(string path) { using (var stringWriter = new StreamWriter(path)) { // We need to make sure the object graph is not being modified when we save, // and this is ensured by [ReaderWriterSynchronized] in ModelBase. stringWriter.WriteLine($"FirstName: {FirstName}"); Thread.Sleep(1000); stringWriter.WriteLine($"LastName: {LastName}"); Thread.Sleep(1000); stringWriter.WriteLine($"Phone: {Phone}"); Thread.Sleep(1000); stringWriter.WriteLine($"Mobile: {Mobile}"); Thread.Sleep(1000); stringWriter.WriteLine($"Email: {Email}"); Thread.Sleep(1000); foreach (var address in Addresses) { Thread.Sleep(1000); if (address == PrincipalAddress) { stringWriter.WriteLine($"Principal address: {address}"); } else { stringWriter.WriteLine($"Secondary address: {address}"); } } } } } }