9276783045c70efc56f4ecbdeab2ce4b9284bf39
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / Xaml / MarkupExtensions / BindingExtension.cs
1 using System;
2 using Tizen.NUI.Binding.Internals;
3 using Tizen.NUI.Binding;
4
5 namespace Tizen.NUI.Xaml
6 {
7     [ContentProperty("Path")]
8     [AcceptEmptyServiceProvider]
9     internal sealed class BindingExtension : IMarkupExtension<BindingBase>
10     {
11                 public string Path { get; set; } = Binding.Binding.SelfPath;
12                 public BindingMode Mode { get; set; } = BindingMode.Default;
13
14         public IValueConverter Converter { get; set; }
15
16         public object ConverterParameter { get; set; }
17
18         public string StringFormat { get; set; }
19
20         public object Source { get; set; }
21
22         public string UpdateSourceEventName { get; set; }
23
24         public object TargetNullValue { get; set; }
25         
26                 public object FallbackValue { get; set; }
27
28         public TypedBindingBase TypedBinding { get; set; }
29
30         BindingBase IMarkupExtension<BindingBase>.ProvideValue(IServiceProvider serviceProvider)
31         {
32             if (TypedBinding == null)
33                 return new Tizen.NUI.Binding.Binding(Path, Mode, Converter, ConverterParameter, StringFormat, Source)
34                                 {
35                                     UpdateSourceEventName = UpdateSourceEventName,
36                     FallbackValue = FallbackValue,
37                     TargetNullValue = TargetNullValue,
38                                 };
39
40             TypedBinding.Mode = Mode;
41             TypedBinding.Converter = Converter;
42             TypedBinding.ConverterParameter = ConverterParameter;
43             TypedBinding.StringFormat = StringFormat;
44             TypedBinding.Source = Source;
45             TypedBinding.UpdateSourceEventName = UpdateSourceEventName;
46             TypedBinding.FallbackValue = FallbackValue;
47             TypedBinding.TargetNullValue = TargetNullValue;
48             return TypedBinding;
49         }
50
51         object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
52         {
53             return (this as IMarkupExtension<BindingBase>).ProvideValue(serviceProvider);
54         }
55     }
56 }