Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Base / Interaction / Model / ModelProperty.cs / 1305376 / ModelProperty.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Activities.Presentation.Model {
using System.Activities.Presentation.Internal.Properties;
using System;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Runtime;
///
/// An ModelProperty represents a property on an item. ModelProperties are
/// associated with an instance of an item, which allows them to have simple
/// Value get/set properties instead of the more cumbersome GetValue/SetValue
/// mechanism of PropertyDescriptor.
///
/// A ModelProperty�s value may come from a locally set value, or it may be
/// inherited from somewhere higher up in the property mechanism. Because
/// all items in the tree contain Source properties, you can
/// easily find out the real source of a property value simply using the
/// following code:
///
/// Console.WriteLine(property.Value.Source);
///
/// Value will return null if the property is not set anywhere in the hierarchy.
///
/// Type converters and editors defined on the underlying data model are
/// wrapped so that they accept ModelItems as parameters.
///
public abstract class ModelProperty {
///
/// Creates a new ModelProperty.
///
protected ModelProperty() { }
///
/// Returns the attributes declared on this property.
///
public abstract AttributeCollection Attributes { get; }
///
/// Returns Value cast as a ModelItemCollection. This property allows you to
/// access collection properties easily without cluttering your code with casts:
///
/// Property.Collection.Add(myItem);
///
/// If the property value is not a collection, this property will return null.
///
[Fx.Tag.KnownXamlExternalAttribute]
public abstract ModelItemCollection Collection { get; }
///
/// Returns the currently computed value for this property. Setting a value
/// on this property is the same as calling SetValue, but can be used in
/// data binding expressions.
///
public abstract object ComputedValue { get; set; }
///
/// Returns the type converter to use with this property. Underlying type
/// converters are all wrapped so they accept Item objects. When performing
/// a conversion to a particular value, the type converter�s return type is
/// not wrapped. Type converters which return standard values also return
/// values as Item objects.
///
public abstract TypeConverter Converter { get; }
///
/// Returns the type which defines this property if IsAttached returns true.
/// Otherwhise, returns null.
///
public abstract Type AttachedOwnerType { get; }
///
/// Returns the default value for this property. If the property does not
/// define a default value this will return null.
///
public abstract object DefaultValue { get; }
///
/// Returns Value cast as a ItemDictionary. This property allows you to
/// access dictionary properties easily without cluttering your code with casts:
///
/// Property.Dictionary[key] = value;
///
/// If the property value is not a dictionary, this property will return null.
///
[Fx.Tag.KnownXamlExternalAttribute]
public abstract ModelItemDictionary Dictionary { get; }
///
/// Returns true if the property can be shown in a property window.
///
public abstract bool IsBrowsable { get; }
///
/// Returns true if the value contained in the property is a ItemCollection.
///
public abstract bool IsCollection { get; }
///
/// Returns true if the value contained in the property is a ItemDictionary.
///
public abstract bool IsDictionary { get; }
///
/// Returns true if the property is read only.
///
public abstract bool IsReadOnly { get; }
///
/// Returns true if the property�s value is set locally.
///
public abstract bool IsSet { get; }
///
/// Returns true if the property represents an attached property from a different type.
///
public abstract bool IsAttached { get; }
///
/// Returns the value set into this property. A property may return a
/// value that is inherited further up the element hierarchy, in which
/// case this property will return a value whose source != this.
/// If no value has ever been set for the property Value will return null.
///
public abstract ModelItem Value { get; }
///
/// Returns the name of this property.
///
public abstract string Name { get; }
///
/// Returns the parent of this property. All properties have
/// parents, so this never returns null.
///
public abstract ModelItem Parent { get; }
///
/// The data type of the property.
///
public abstract Type PropertyType { get; }
///
/// Clears the local value for the property.
///
public abstract void ClearValue();
///
/// Sets a local value on a property. If this value is already
/// a ModelItem, it will be used directly. If it isn�t, a ModelItem
/// will be created. Setting null into a property is valid, but
/// this is not the same as calling ClearValue().
///
///
/// The new value to set.
///
///
/// The input value, if the value is already a ModelItem, or a newly
/// created ModelItem wrapping the value.
///
public abstract ModelItem SetValue(object value);
///
/// Equality operator.
///
// FXCop: args are validated; fxcop does not seem to understand ReferenceEquals.
public static bool operator ==(ModelProperty first, ModelProperty second) {
if (object.ReferenceEquals(first, second)) return true;
if (object.ReferenceEquals(first, null) || object.ReferenceEquals(second, null)) return false;
return (first.Parent == second.Parent && first.Name.Equals(second.Name));
}
///
/// Inequality operator.
///
// FXCop: args are validated; fxcop does not seem to understand ReferenceEquals.
public static bool operator !=(ModelProperty first, ModelProperty second) {
if (object.ReferenceEquals(first, second)) return false;
if (object.ReferenceEquals(first, null) || object.ReferenceEquals(second, null)) return true;
return (first.Parent != second.Parent || !first.Name.Equals(second.Name));
}
///
/// Equality for properties. Properties are equal if
/// they have the same name and parent.
///
///
///
public override bool Equals(object obj) {
if (object.ReferenceEquals(obj, this)) return true;
ModelProperty prop = obj as ModelProperty;
if (object.ReferenceEquals(prop, null)) return false;
if (prop.Parent != Parent) return false;
return prop.Name.Equals(Name);
}
///
/// Standard hashcode implementation.
///
///
public override int GetHashCode() {
return Parent.GetHashCode() ^ Name.GetHashCode();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ActivityDesigner.cs
- StringConcat.cs
- Emitter.cs
- StrongNameKeyPair.cs
- ChainOfResponsibility.cs
- WorkflowApplicationAbortedEventArgs.cs
- BrowserCapabilitiesFactoryBase.cs
- WebPartMenuStyle.cs
- RegexCode.cs
- CannotUnloadAppDomainException.cs
- HTTP_SERVICE_CONFIG_URLACL_PARAM.cs
- XmlAttributeCache.cs
- OneWayChannelListener.cs
- Vector.cs
- MessageSecurityOverTcpElement.cs
- WebPartHeaderCloseVerb.cs
- Timer.cs
- EntityTypeEmitter.cs
- RandomNumberGenerator.cs
- Thread.cs
- Visual3D.cs
- MgmtResManager.cs
- ClosableStream.cs
- RadioButtonList.cs
- XmlName.cs
- AnnotationComponentChooser.cs
- EntityDataSource.cs
- ObjectDataSourceEventArgs.cs
- DesignerSerializationManager.cs
- SpinWait.cs
- SingleAnimationBase.cs
- DateRangeEvent.cs
- AsyncResult.cs
- PagesChangedEventArgs.cs
- WorkflowMarkupSerializer.cs
- ContextMenu.cs
- VBCodeProvider.cs
- JulianCalendar.cs
- StreamGeometry.cs
- XmlDocumentViewSchema.cs
- SignedInfo.cs
- RegionInfo.cs
- ValueTypeFixupInfo.cs
- OleDbDataReader.cs
- StreamSecurityUpgradeAcceptorBase.cs
- JobCollate.cs
- ResourcesBuildProvider.cs
- CopyOfAction.cs
- CellLabel.cs
- EncryptedPackageFilter.cs
- VariableElement.cs
- dataprotectionpermissionattribute.cs
- BrowserTree.cs
- XhtmlTextWriter.cs
- ObjectNotFoundException.cs
- BrowserDefinition.cs
- NetNamedPipeSecurityMode.cs
- SqlServer2KCompatibilityAnnotation.cs
- SettingsSavedEventArgs.cs
- ADMembershipUser.cs
- XhtmlBasicObjectListAdapter.cs
- ProxyAttribute.cs
- CompoundFileDeflateTransform.cs
- UIElementCollection.cs
- RandomNumberGenerator.cs
- Suspend.cs
- StylusPointProperties.cs
- PointLightBase.cs
- _CacheStreams.cs
- WebRequestModuleElement.cs
- ColumnMap.cs
- OdbcCommand.cs
- DataSourceHelper.cs
- StorageEntitySetMapping.cs
- WebPartZoneCollection.cs
- GridViewPageEventArgs.cs
- Pens.cs
- DataServiceContext.cs
- NumberFunctions.cs
- StrongNameIdentityPermission.cs
- Delegate.cs
- _DomainName.cs
- LayoutTableCell.cs
- JobPageOrder.cs
- Resources.Designer.cs
- DeclaredTypeValidatorAttribute.cs
- DataGridColumnEventArgs.cs
- MemberHolder.cs
- ObservableCollection.cs
- SetStoryboardSpeedRatio.cs
- ObjectSet.cs
- RequiredAttributeAttribute.cs
- RuntimeConfigLKG.cs
- FileUtil.cs
- ManagementInstaller.cs
- GetCryptoTransformRequest.cs
- BigInt.cs
- UIPermission.cs
- AvTraceFormat.cs
- HierarchicalDataSourceDesigner.cs