in class/Microsoft.SilverlightControls/:
[moon.git] / class / System.Windows / System.Windows.Data / Binding.cs
blobf30c5d65177765b7336a996565b41a8ace695e24
1 //
2 // Binding.cs
3 //
4 // Contact:
5 // Moonlight List (moonlight-list@lists.ximian.com)
6 //
7 // Copyright 2008 Novell, Inc.
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.ComponentModel;
30 using System.Globalization;
31 using System.Windows;
32 using System.Collections.Generic;
34 using Mono;
36 namespace System.Windows.Data {
37 public class Binding {
38 IValueConverter converter;
39 CultureInfo converterCulture;
40 object converterParameter;
41 PropertyPath path;
42 BindingMode mode;
43 bool notifyonerror;
44 bool validatesonex;
45 bool issealed;
46 object source;
47 UpdateSourceTrigger trigger;
49 public IValueConverter Converter {
50 get { return converter; }
51 set {
52 CheckSealed ();
53 converter = value;
57 public CultureInfo ConverterCulture {
58 get { return converterCulture; }
59 set {
60 CheckSealed ();
61 converterCulture = value;
65 public object ConverterParameter {
66 get { return converterParameter; }
67 set {
68 CheckSealed ();
69 converterParameter = value;
73 public BindingMode Mode {
74 get { return mode; }
75 set {
76 CheckSealed ();
77 mode = value;
81 public bool NotifyOnValidationError {
82 get { return notifyonerror; }
83 set {
84 CheckSealed ();
85 notifyonerror = value;
89 [TypeConverter (typeof (PropertyPathConverter))]
90 public PropertyPath Path {
91 get {
92 return path;
94 set {
95 if (value.NativeDP != IntPtr.Zero)
96 throw new ArgumentException ("PropertyPaths which are instantiated with a DependencyProperty are not supported");
98 CheckSealed ();
99 path = value;
103 internal bool Sealed {
104 get {
105 return issealed;
107 private set {
108 issealed = value;
112 public object Source {
113 get { return source; }
114 set {
115 CheckSealed ();
116 source = value;
120 public UpdateSourceTrigger UpdateSourceTrigger {
121 get { return trigger; }
122 set { trigger = value; }
125 public bool ValidatesOnExceptions {
126 get { return validatesonex; }
127 set {
128 CheckSealed ();
129 validatesonex = value;
133 public Binding ()
134 : this ("")
139 public Binding (string path)
141 if (path == null)
142 throw new ArgumentNullException ("path");
144 Mode = BindingMode.OneWay;
145 Path = new PropertyPath (path);
146 trigger = UpdateSourceTrigger.Default;
149 void CheckSealed ()
151 if (Sealed)
152 throw new InvalidOperationException ("The Binding cannot be changed after it has been used");
155 internal void Seal ()
157 if (Sealed)
158 return;
160 Sealed = true;