|
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="ControlToViewModelAttribute.cs" company="Catel development team">
// Copyright (c) 2008 - 2011 Catel development team. All rights reserved.
// </copyright>
// <summary>
// Mapping types for the <see cref="ControlToViewModelAttribute" />.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
using System;
using System.Windows;
using Catel.Windows;
using Catel.Windows.Controls;
namespace Catel.MVVM.UI
{
#region Enums
/// <summary>
/// Mapping types for the <see cref="ControlToViewModelAttribute"/>.
/// </summary>
public enum ControlViewModelModelMappingType
{
/// <summary>
/// Two way, which means that either the control or the view model will update
/// the values of the other party as soon as they are updated.
/// <para />
/// When this value is used, nothing happens when the view model of the user control
/// changes. This way, it might be possible that the values of the control and the
/// view model are different. The first one to update next will update the other.
/// </summary>
TwoWayDoNothing,
/// <summary>
/// Two way, which means that either the control or the view model will update
/// the values of the other party as soon as they are updated.
/// <para />
/// When this value is used, the value of the control is used when the view model
/// of the user control is changed, and is directly transferred to the view model value.
/// </summary>
TwoWayControlWins,
/// <summary>
/// Two way, which means that either the control or the view model will update
/// the values of the other party as soon as they are updated.
/// <para />
/// When this value is used, the value of the view model is used when the view model
/// of the user control is changed, and is directly transferred to the control value.
/// </summary>
TwoWayViewModelWins,
/// <summary>
/// The mapping is from the control to the view model only.
/// </summary>
ControlToViewModel,
/// <summary>
/// The mapping is from the view model to the control only.
/// </summary>
ViewModelToControl
}
#endregion
/// <summary>
/// A mapper attribute to map a <see cref="FrameworkElement"/> (such as the <see cref="UserControl{TViewModel}"/>
/// or the <see cref="DataWindow{TViewModel}"/> property to a <see cref="ViewModelBase"/> property.
/// <para />
/// This class is very useful when creating custom user controls that need more parameterized settings than just the
/// <see cref="System.Windows.Controls.UserControl.DataContext"/> property.
/// </summary>
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class ControlToViewModelAttribute : Attribute
{
#region Constructor & destructor
/// <summary>
/// Initializes a new instance of the <see cref="ControlToViewModelAttribute"/> class.
/// </summary>
public ControlToViewModelAttribute()
{
MappingType = ControlViewModelModelMappingType.TwoWayViewModelWins;
}
/// <summary>
/// Initializes a new instance of the <see cref="ControlToViewModelAttribute"/> class.
/// </summary>
/// <param name="viewModelPropertyName">Name of the view model property.</param>
public ControlToViewModelAttribute(string viewModelPropertyName)
: this()
{
ViewModelPropertyName = viewModelPropertyName;
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the view model property name.
/// </summary>
/// <value>The view model property name.</value>
public string ViewModelPropertyName { get; private set; }
/// <summary>
/// Gets or sets the type of the mapping.
/// </summary>
/// <value>The type of the mapping.</value>
public ControlViewModelModelMappingType MappingType { get; set; }
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.