1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //----------------------------------------------------------------
5 namespace System.ServiceModel.Activities.Presentation
7 using System.Activities.Presentation;
8 using System.Activities.Presentation.Hosting;
9 using System.Activities.Presentation.Model;
10 using System.Collections.ObjectModel;
11 using System.ComponentModel;
13 class ContentDialogViewModel<TMessage, TParameter> : INotifyPropertyChanged
14 where TMessage : new()
15 where TParameter : new()
17 EditingMode editingMode = EditingMode.Message;
18 ModelItem messageExpression;
19 Type declaredMessageType;
21 public ContentDialogViewModel(ModelItem modelItem)
23 this.ModelItem = modelItem;
24 InitializeMessageAndParameterData();
27 public event PropertyChangedEventHandler PropertyChanged;
29 public bool IsEditingEnabled
33 return !this.Context.Items.GetValue<ReadOnlyState>().IsReadOnly;
37 public bool IsMessageChecked
41 return this.editingMode == EditingMode.Message;
45 if (value != this.IsMessageChecked)
47 this.editingMode = value ? EditingMode.Message : EditingMode.Parameter;
53 public bool IsParameterChecked
57 return this.editingMode == EditingMode.Parameter;
61 if (value != this.IsParameterChecked)
63 this.editingMode = value ? EditingMode.Parameter : EditingMode.Message;
69 public ModelItem ModelItem
75 public EditingContext Context
79 return this.ModelItem.GetEditingContext();
83 public ModelItem MessageExpression
87 return this.messageExpression;
91 this.messageExpression = value;
92 if (this.PropertyChanged != null)
94 this.PropertyChanged(this, new PropertyChangedEventArgs("MessageExpression"));
99 public Type DeclaredMessageType
103 return this.declaredMessageType;
107 this.declaredMessageType = value;
108 if (this.PropertyChanged != null)
110 this.PropertyChanged(this, new PropertyChangedEventArgs("DeclaredMessageType"));
115 public bool IsDictionary
121 public Type UnderlyingArgumentType
127 public ObservableCollection<DynamicArgumentWrapperObject> DynamicArguments
135 ModelProperty contentProperty = this.ModelItem.Properties["Content"];
136 if (this.editingMode == EditingMode.Parameter)
138 contentProperty.SetValue(new TParameter());
139 DynamicArgumentDesigner.WrapperCollectionToModelItem(this.DynamicArguments,
140 contentProperty.Value.Properties["Parameters"].Value,
141 this.IsDictionary, this.UnderlyingArgumentType);
145 if (this.DeclaredMessageType == null && this.MessageExpression == null)
147 contentProperty.SetValue(null);
151 contentProperty.SetValue(new TMessage());
152 contentProperty.Value.Properties["Message"].SetValue(this.MessageExpression);
153 contentProperty.Value.Properties["DeclaredMessageType"].SetValue(this.DeclaredMessageType);
160 void InitializeMessageAndParameterData()
162 ModelItem parameterModelItem;
163 ModelTreeManager modelTreeManager = (this.ModelItem as IModelTreeItem).ModelTreeManager;
165 ModelItem contentModelItem = this.ModelItem.Properties["Content"].Value;
166 if (contentModelItem == null)
168 this.messageExpression = modelTreeManager.WrapAsModelItem(new TMessage()).Properties["Message"].Value;
169 this.declaredMessageType = null;
170 parameterModelItem = modelTreeManager.WrapAsModelItem(new TParameter()).Properties["Parameters"].Value;
174 if (contentModelItem.ItemType == typeof(TMessage))
176 this.editingMode = EditingMode.Message;
177 this.messageExpression = contentModelItem.Properties["Message"].Value;
178 this.declaredMessageType = (Type)contentModelItem.Properties["DeclaredMessageType"].ComputedValue;
179 parameterModelItem = modelTreeManager.WrapAsModelItem(new TParameter()).Properties["Parameters"].Value;
183 this.editingMode = EditingMode.Parameter;
184 this.messageExpression = modelTreeManager.WrapAsModelItem(new TMessage()).Properties["Message"].Value;
185 this.declaredMessageType = null;
186 parameterModelItem = contentModelItem.Properties["Parameters"].Value;
191 Type underlyingArgumentType;
192 this.DynamicArguments = DynamicArgumentDesigner.ModelItemToWrapperCollection(
195 out underlyingArgumentType);
197 this.IsDictionary = isDictionary;
198 this.UnderlyingArgumentType = underlyingArgumentType;
203 if (this.PropertyChanged != null)
205 this.PropertyChanged(this, new PropertyChangedEventArgs("IsMessageChecked"));
206 this.PropertyChanged(this, new PropertyChangedEventArgs("IsParameterChecked"));