Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / DataGridBoundColumn.cs / 1305600 / DataGridBoundColumn.cs
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
namespace System.Windows.Controls
{
///
/// A base class for specifying column definitions for certain standard
/// types that do not allow arbitrary templates.
///
public abstract class DataGridBoundColumn : DataGridColumn
{
#region Constructors
static DataGridBoundColumn()
{
SortMemberPathProperty.OverrideMetadata(typeof(DataGridBoundColumn), new FrameworkPropertyMetadata(null, OnCoerceSortMemberPath));
}
#endregion
#region Binding
private static object OnCoerceSortMemberPath(DependencyObject d, object baseValue)
{
var column = (DataGridBoundColumn)d;
var sortMemberPath = (string)baseValue;
if (string.IsNullOrEmpty(sortMemberPath))
{
var bindingSortMemberPath = DataGridHelper.GetPathFromBinding(column.Binding as Binding);
if (!string.IsNullOrEmpty(bindingSortMemberPath))
{
sortMemberPath = bindingSortMemberPath;
}
}
return sortMemberPath;
}
///
/// The binding that will be applied to the generated element.
///
///
/// This isn't a DP because if it were getting the value would evaluate the binding.
///
public virtual BindingBase Binding
{
get
{
return _binding;
}
set
{
if (_binding != value)
{
BindingBase oldBinding = _binding;
_binding = value;
CoerceValue(IsReadOnlyProperty);
CoerceValue(SortMemberPathProperty);
OnBindingChanged(oldBinding, _binding);
}
}
}
protected override bool OnCoerceIsReadOnly(bool baseValue)
{
if (DataGridHelper.IsOneWay(_binding))
{
return true;
}
// only call the base if we dont want to force IsReadOnly true
return base.OnCoerceIsReadOnly(baseValue);
}
///
/// Called when Binding changes.
///
///
/// Default implementation notifies the DataGrid and its subtree about the change.
///
/// The old binding.
/// The new binding.
protected virtual void OnBindingChanged(BindingBase oldBinding, BindingBase newBinding)
{
NotifyPropertyChanged("Binding");
}
///
/// Assigns the Binding to the desired property on the target object.
///
internal void ApplyBinding(DependencyObject target, DependencyProperty property)
{
BindingBase binding = Binding;
if (binding != null)
{
BindingOperations.SetBinding(target, property, binding);
}
else
{
BindingOperations.ClearBinding(target, property);
}
}
#endregion
#region Styling
///
/// A style that is applied to the generated element when not editing.
/// The TargetType of the style depends on the derived column class.
///
public Style ElementStyle
{
get { return (Style)GetValue(ElementStyleProperty); }
set { SetValue(ElementStyleProperty, value); }
}
///
/// The DependencyProperty for the ElementStyle property.
///
public static readonly DependencyProperty ElementStyleProperty =
DependencyProperty.Register(
"ElementStyle",
typeof(Style),
typeof(DataGridBoundColumn),
new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent)));
///
/// A style that is applied to the generated element when editing.
/// The TargetType of the style depends on the derived column class.
///
public Style EditingElementStyle
{
get { return (Style)GetValue(EditingElementStyleProperty); }
set { SetValue(EditingElementStyleProperty, value); }
}
///
/// The DependencyProperty for the EditingElementStyle property.
///
public static readonly DependencyProperty EditingElementStyleProperty =
DependencyProperty.Register(
"EditingElementStyle",
typeof(Style),
typeof(DataGridBoundColumn),
new FrameworkPropertyMetadata(null, new PropertyChangedCallback(DataGridColumn.NotifyPropertyChangeForRefreshContent)));
///
/// Assigns the ElementStyle to the desired property on the given element.
///
internal void ApplyStyle(bool isEditing, bool defaultToElementStyle, FrameworkElement element)
{
Style style = PickStyle(isEditing, defaultToElementStyle);
if (style != null)
{
element.Style = style;
}
}
private Style PickStyle(bool isEditing, bool defaultToElementStyle)
{
Style style = isEditing ? EditingElementStyle : ElementStyle;
if (isEditing && defaultToElementStyle && (style == null))
{
style = ElementStyle;
}
return style;
}
#endregion
#region Clipboard Copy/Paste
///
/// If base ClipboardContentBinding is not set we use Binding.
///
public override BindingBase ClipboardContentBinding
{
get
{
return base.ClipboardContentBinding ?? Binding;
}
set
{
base.ClipboardContentBinding = value;
}
}
#endregion
#region Property Changed Handler
///
/// Override which rebuilds the cell's visual tree for Binding change
///
///
///
protected internal override void RefreshCellContent(FrameworkElement element, string propertyName)
{
DataGridCell cell = element as DataGridCell;
if (cell != null)
{
bool isCellEditing = cell.IsEditing;
if ((string.Compare(propertyName, "Binding", StringComparison.Ordinal) == 0) ||
(string.Compare(propertyName, "ElementStyle", StringComparison.Ordinal) == 0 && !isCellEditing) ||
(string.Compare(propertyName, "EditingElementStyle", StringComparison.Ordinal) == 0 && isCellEditing))
{
cell.BuildVisualTree();
return;
}
}
base.RefreshCellContent(element, propertyName);
}
#endregion
#region Data
private BindingBase _binding;
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ImageKeyConverter.cs
- NameTable.cs
- CompositeScriptReferenceEventArgs.cs
- RequestQueue.cs
- SoapEnumAttribute.cs
- BaseUriHelper.cs
- QueryParameter.cs
- DecoderReplacementFallback.cs
- InfoCardListRequest.cs
- DragDrop.cs
- DynamicMethod.cs
- X509CertificateValidator.cs
- EDesignUtil.cs
- PointHitTestResult.cs
- Vector3DCollection.cs
- Int16Animation.cs
- MatchingStyle.cs
- ParallelTimeline.cs
- NumberFormatInfo.cs
- DataGridColumn.cs
- DBNull.cs
- ControlIdConverter.cs
- MemberRestriction.cs
- SystemIPv4InterfaceProperties.cs
- SiteOfOriginPart.cs
- DESCryptoServiceProvider.cs
- IndexedString.cs
- EntryWrittenEventArgs.cs
- EntityKey.cs
- CustomLineCap.cs
- TreeChangeInfo.cs
- ItemContainerGenerator.cs
- Resources.Designer.cs
- AttributeConverter.cs
- DocumentApplication.cs
- ArgumentDirectionHelper.cs
- CatalogPartChrome.cs
- login.cs
- CommandBindingCollection.cs
- PropertyBuilder.cs
- OracleDataAdapter.cs
- TreeNodeCollection.cs
- CodeCompileUnit.cs
- NavigateEvent.cs
- HotSpot.cs
- ILGenerator.cs
- HelloMessageApril2005.cs
- TransactionInformation.cs
- DupHandleConnectionReader.cs
- DataObjectCopyingEventArgs.cs
- XmlWriter.cs
- RewritingProcessor.cs
- CTreeGenerator.cs
- EnumBuilder.cs
- SequentialOutput.cs
- XPathAxisIterator.cs
- NamespaceEmitter.cs
- StorageEntitySetMapping.cs
- WebServiceEnumData.cs
- KeyValuePairs.cs
- TriggerAction.cs
- PrtTicket_Base.cs
- XmlSchemaSequence.cs
- SafeNativeMethods.cs
- ContextMenuService.cs
- AnimationClock.cs
- XmlUtil.cs
- VisualBrush.cs
- DefaultSettingsSection.cs
- HtmlSelect.cs
- ObjectContextServiceProvider.cs
- GorillaCodec.cs
- PlaceHolder.cs
- PointLight.cs
- RepeatInfo.cs
- OleDbParameter.cs
- RowSpanVector.cs
- MailSettingsSection.cs
- SqlDataAdapter.cs
- OracleTimeSpan.cs
- ObjectQueryExecutionPlan.cs
- Triplet.cs
- GlobalizationAssembly.cs
- AppearanceEditorPart.cs
- UnauthorizedAccessException.cs
- RootDesignerSerializerAttribute.cs
- Win32Interop.cs
- printdlgexmarshaler.cs
- DeflateInput.cs
- DateTimeOffset.cs
- GACIdentityPermission.cs
- ToolboxDataAttribute.cs
- COM2ExtendedUITypeEditor.cs
- PreservationFileWriter.cs
- Freezable.cs
- RectValueSerializer.cs
- MarkupWriter.cs
- SQLBinaryStorage.cs
- EventSource.cs
- WindowsFormsHelpers.cs