50fd16c35eda8e00b5e3c862b2ffcd7c1ff1af8b
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.XamlBuild / src / internal / Xaml / MarkupExtensions / BindingExtension.cs
1 using System;
2 using Tizen.NUI.Binding.Internals;
3 using Tizen.NUI.Binding;
4 using Tizen.NUI.EXaml;
5 using Mono.Cecil;
6 using Tizen.NUI.EXaml.Build.Tasks;
7
8 namespace Tizen.NUI.Xaml
9 {
10     [ContentProperty("Path")]
11     [AcceptEmptyServiceProvider]
12     internal sealed class BindingExtension : IMarkupExtension<BindingBase>
13     {
14         public string Path { get; set; } = Tizen.NUI.Binding.Binding.SelfPath;
15         public BindingMode Mode { get; set; } = BindingMode.Default;
16
17         public EXamlCreateObject ModeInEXaml { get; set; } = null;
18
19         public object Converter { get; set; }
20
21         public object ConverterParameter { get; set; }
22
23         public string StringFormat { get; set; }
24
25         public object Source { get; set; }
26
27         public string UpdateSourceEventName { get; set; }
28
29         public object TargetNullValue { get; set; }
30
31         public object FallbackValue { get; set; }
32
33         public TypedBindingBase TypedBinding { get; set; }
34
35         public EXamlCreateObject ProvideValue(EXamlContext context, ModuleDefinition module)
36         {
37             if (TypedBinding == null)
38             {
39                 var newTypeRef = module.ImportReference(typeof(Tizen.NUI.Binding.Binding));
40                 return new EXamlCreateObject(context, null, newTypeRef, new object[] { Path, ModeInEXaml, Converter, ConverterParameter, StringFormat, Source });
41             }
42             else
43             {
44                 throw new Exception("TypedBinding should not be not null");
45                 //TypedBinding.Mode = Mode;
46                 //TypedBinding.Converter = Converter;
47                 //TypedBinding.ConverterParameter = ConverterParameter;
48                 //TypedBinding.StringFormat = StringFormat;
49                 //TypedBinding.Source = Source;
50                 //TypedBinding.UpdateSourceEventName = UpdateSourceEventName;
51                 //TypedBinding.FallbackValue = FallbackValue;
52                 //TypedBinding.TargetNullValue = TargetNullValue;
53                 //return TypedBinding;
54             }
55         }
56
57         BindingBase IMarkupExtension<BindingBase>.ProvideValue(IServiceProvider serviceProvider)
58         {
59             if (TypedBinding == null)
60                 return new Tizen.NUI.Binding.Binding(Path, Mode, Converter as IValueConverter, ConverterParameter, StringFormat, Source)
61                 {
62                     UpdateSourceEventName = UpdateSourceEventName,
63                     FallbackValue = FallbackValue,
64                     TargetNullValue = TargetNullValue,
65                 };
66
67             TypedBinding.Mode = Mode;
68             TypedBinding.Converter = Converter as IValueConverter;
69             TypedBinding.ConverterParameter = ConverterParameter;
70             TypedBinding.StringFormat = StringFormat;
71             TypedBinding.Source = Source;
72             TypedBinding.UpdateSourceEventName = UpdateSourceEventName;
73             TypedBinding.FallbackValue = FallbackValue;
74             TypedBinding.TargetNullValue = TargetNullValue;
75             return TypedBinding;
76         }
77
78         object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
79         {
80             return (this as IMarkupExtension<BindingBase>).ProvideValue(serviceProvider);
81         }
82     }
83 }