Hi,
I have three classes Employee, EmployeeCollection and Address
I have set the datacontext to a EmployeeCollection this works ok until I get to the Address Field then i only get one textbox. I have tried to create a DataTemplate for Address but it doesn't seem to use the template I have created.
Thanks
David
I have three classes Employee, EmployeeCollection and Address
I have set the datacontext to a EmployeeCollection this works ok until I get to the Address Field then i only get one textbox. I have tried to create a DataTemplate for Address but it doesn't seem to use the template I have created.
Thanks
David
public class Address { String _Street; String _City; String _Town; String _County; String _PostCode; public String Street { get { return this._Street; } set { this._Street = value; NotifyPropertyChanged(() => Street); } } public String City { get { return this._City; } set { this._City = value; NotifyPropertyChanged(() => City); } } public String Town { get { return this._Town; } set { this._Town = value; NotifyPropertyChanged(() => Town); } } public String County { get { return this._County; } set { this._County = value; NotifyPropertyChanged(() => County); } } public String PostCode { get { return this._PostCode; } set { this._PostCode = value; NotifyPropertyChanged(() => PostCode); } } public Address() { } public Address(String street, String city, String town, String county, String postCode) { this.Street = street; this.City = city; this.Town = town; this.County = county; this.PostCode = postCode; } #region PropertyNotify [field: NonSerializedAttribute()] public event PropertyChangedEventHandler PropertyChanged = delegate { }; public readonly Action<Action> _synchronousInvoker; public Address(Action<Action> synchronousInvoker) { _synchronousInvoker = synchronousInvoker; } public void NotifyPropertyChanged<T>(Expression<Func<T>> expr) { var body = expr.Body as MemberExpression; if (body != null) { try { if (_synchronousInvoker != null) _synchronousInvoker(() => InvokePropertyChanged(expr)); else InvokePropertyChanged(expr); } catch (Exception Ex) { if (Ex.Message == "Invoke or BeginInvoke cannot be called on a control until the window handle has been created.") { InvokePropertyChanged(expr); } } } } private void InvokePropertyChanged<T>(Expression<Func<T>> expr) { var body = expr.Body as MemberExpression; if (body != null) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(body.Member.Name)); } } } #endregion } public class Employee : INotifyPropertyChanged { Int32 _EmployeeID; String _FirstName; String _SurName; Location _DefaultStore; float _Sallary; float _HourlyRate; EmployeeType _EmployeeType; Address _Address; public Int32 EmployeeID { get { return _EmployeeID; } set { _EmployeeID = value; NotifyPropertyChanged(() => EmployeeID); } } public String FirstName { get { return this._FirstName; } set { this._FirstName = value; NotifyPropertyChanged(() => FirstName); } } public String SurName { get { return this._SurName; } set { this._SurName = value; NotifyPropertyChanged(() => SurName); } } public Location DefaultStore { get { return this._DefaultStore; } set { this._DefaultStore = value; NotifyPropertyChanged(() => DefaultStore); } } public float Sallary { get { return this._Sallary; } set { this._Sallary = value; NotifyPropertyChanged(() => Sallary); } } public float HourlyRate { get { return this._HourlyRate; } set { this._HourlyRate = value; NotifyPropertyChanged(() => HourlyRate); } } public EmployeeType EmployeeType { get { return this._EmployeeType; } set { this._EmployeeType = value; NotifyPropertyChanged(() => EmployeeType); } } public Address Address { get { return _Address; } set { _Address = value; NotifyPropertyChanged(() => Address); } } public Employee() { } public Employee(Int32 employeeID, String firstName, String surName, Location defaultStore, float sallary, float hourlyRate, EmployeeType employeeType, Address address) { this._EmployeeID = employeeID; this._FirstName = firstName; this._SurName = surName; this._DefaultStore = defaultStore; this._Sallary = sallary; this._HourlyRate = hourlyRate; this._EmployeeType = employeeType; this._Address = address; } #region PropertyNotify [field: NonSerializedAttribute()] public event PropertyChangedEventHandler PropertyChanged = delegate { }; public readonly Action<Action> _synchronousInvoker; public Employee(Action<Action> synchronousInvoker) { _synchronousInvoker = synchronousInvoker; } public void NotifyPropertyChanged<T>(Expression<Func<T>> expr) { var body = expr.Body as MemberExpression; if (body != null) { try { if (_synchronousInvoker != null) _synchronousInvoker(() => InvokePropertyChanged(expr)); else InvokePropertyChanged(expr); } catch (Exception Ex) { if (Ex.Message == "Invoke or BeginInvoke cannot be called on a control until the window handle has been created.") { InvokePropertyChanged(expr); } } } } private void InvokePropertyChanged<T>(Expression<Func<T>> expr) { var body = expr.Body as MemberExpression; if (body != null) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(body.Member.Name)); } } } #endregion } public class EmployeeCollection : ObservableCollection<Employee> { public EmployeeCollection() { } }