static void Main(string[] args) { #region two-stage path ParentDataClass parentDataObj = new ParentDataClass(); //parentDataObj.TheData = new DataClass(); //parentDataObj.TheData.MyStringProp = "Hello World"; object targetObj = new object(); OneWayPropertyBindingBase<string, string> binding = new OneWayPropertyBindingBase<string, string>(); TwoStagePropGetter compoundPropGetter = new TwoStagePropGetter(parentDataObj); binding.SourcePropertyGetter = compoundPropGetter; binding.TargetPropertySetter = new APropSetter<string>(targetObj, MyAProperty); binding.Bind(); Console.WriteLine(MyAProperty.GetProperty(targetObj)); parentDataObj.TheData = new DataClass(); parentDataObj.TheData.MyStringProp = "Hi World"; Console.WriteLine(MyAProperty.GetProperty(targetObj)); parentDataObj.TheData = new DataClass { MyStringProp = "blablabla" }; Console.WriteLine(MyAProperty.GetProperty(targetObj)); parentDataObj.TheData.MyStringProp = "Hello World"; Console.WriteLine(MyAProperty.GetProperty(targetObj)); parentDataObj.TheData.MyStringProp = null; string result = MyAProperty.GetProperty(targetObj); if (result == null) Console.WriteLine("NULL"); else Console.WriteLine("NOT NULL"); parentDataObj.TheData = null; Console.WriteLine(MyAProperty.GetProperty(targetObj)); #endregion two-stage path }
static void Main(string[] args) { // create source object ParentDataClass sourceDataObj = new ParentDataClass(); sourceDataObj.TheData = new DataClass { MyStringProp = "Hello World" }; // create target object ParentDataClass targetDataObject = new ParentDataClass(); targetDataObject.TheData = new DataClass(); // create the binding OneWayPropertyBindingBase<object, object> binding = new OneWayPropertyBindingBase<object, object>(); CompositePathGetter sourcePathGetter = new CompositePathGetter ( new BindingPathLink<object>[] { new BindingPathLink<object>("TheData"), new BindingPathLink<object>("MyStringProp"), }, "A Default String" ); sourcePathGetter.TheObj = sourceDataObj; binding.SourcePropertyGetter = sourcePathGetter; CompositePathSetter targetPathSetter = new CompositePathSetter ( new BindingPathLink<object>[] { new BindingPathLink<object>("TheData"), new BindingPathLink<object>("MyStringProp") } ); targetPathSetter.TheObj = targetDataObject; binding.TargetPropertySetter = targetPathSetter; binding.Bind(); Console.WriteLine(targetDataObject.TheData.MyStringProp); sourceDataObj.TheData.MyStringProp = "Hi World"; Console.WriteLine(targetDataObject.TheData.MyStringProp); sourceDataObj.TheData = new DataClass { MyStringProp = "bye bye" }; Console.WriteLine(targetDataObject.TheData.MyStringProp); sourceDataObj.TheData = null; Console.WriteLine(targetDataObject.TheData.MyStringProp); targetDataObject.TheData = new DataClass(); Console.WriteLine(targetDataObject.TheData.MyStringProp); targetDataObject.TheData.MyStringProp = "Hi"; Console.WriteLine(targetDataObject.TheData.MyStringProp); targetDataObject.TheData = new DataClass(); Console.WriteLine(targetDataObject.TheData.MyStringProp); }