2009-09-29 Jeffrey Stedfast <fejj@novell.com>
[moon.git] / class / System.Windows / System.Windows.Data / Binding.cs
blob1ef3dd5787734c5a8d4b5301143954d73786a6c9
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;
48 public IValueConverter Converter {
49 get { return converter; }
50 set {
51 CheckSealed ();
52 converter = value;
56 public CultureInfo ConverterCulture {
57 get { return converterCulture; }
58 set {
59 CheckSealed ();
60 converterCulture = value;
64 public object ConverterParameter {
65 get { return converterParameter; }
66 set {
67 CheckSealed ();
68 converterParameter = value;
72 public BindingMode Mode {
73 get { return mode; }
74 set {
75 CheckSealed ();
76 mode = value;
80 public bool NotifyOnValidationError {
81 get { return notifyonerror; }
82 set {
83 CheckSealed ();
84 notifyonerror = value;
88 [TypeConverter (typeof (PropertyPathConverter))]
89 public PropertyPath Path {
90 get {
91 return path;
93 set {
94 if (value.NativeDP != IntPtr.Zero)
95 throw new ArgumentException ("PropertyPaths which are instantiated with a DependencyProperty are not supported");
97 CheckSealed ();
98 path = value;
102 internal bool Sealed {
103 get {
104 return issealed;
106 private set {
107 issealed = value;
111 public object Source {
112 get { return source; }
113 set {
114 CheckSealed ();
115 source = value;
119 public bool ValidatesOnExceptions {
120 get { return validatesonex; }
121 set {
122 CheckSealed ();
123 validatesonex = value;
127 public Binding ()
128 : this ("")
133 public Binding (string path)
135 if (path == null)
136 throw new ArgumentNullException ("path");
138 Mode = BindingMode.OneWay;
139 Path = new PropertyPath (path);
142 void CheckSealed ()
144 if (Sealed)
145 throw new InvalidOperationException ("The Binding cannot be changed after it has been used");
148 internal void Seal ()
150 if (Sealed)
151 return;
153 Sealed = true;