// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.ComponentModel;
namespace CommunityToolkit.Mvvm.ComponentModel;
///
/// An attribute that indicates that a given field should be wrapped by a generated observable property.
/// In order to use this attribute, the containing type has to implement the interface
/// and expose a method with the same signature as . If the containing
/// type also implements the interface and exposes a method with the same signature as
/// , then this method will be invoked as well by the property setter.
///
/// This attribute can be used as follows:
///
/// partial class MyViewModel : ObservableObject
/// {
/// [ObservableProperty]
/// private string name;
///
/// [ObservableProperty]
/// private bool isEnabled;
/// }
///
///
/// And with this, code analogous to this will be generated:
///
/// partial class MyViewModel
/// {
/// public string Name
/// {
/// get => name;
/// set => SetProperty(ref name, value);
/// }
///
/// public bool IsEnabled
/// {
/// get => name;
/// set => SetProperty(ref isEnabled, value);
/// }
/// }
///
///
///
/// The generated properties will automatically use the UpperCamelCase format for their names,
/// which will be derived from the field names. The generator can also recognize fields using either
/// the _lowerCamel or m_lowerCamel naming scheme. Otherwise, the first character in the
/// source field name will be converted to uppercase (eg. isEnabled to IsEnabled).
///
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
public sealed class ObservablePropertyAttribute : Attribute
{
}