Table of Contents

Class ObservablePropertyAttribute

Namespace
CommunityToolkit.Mvvm.ComponentModel
Assembly
CommunityToolkit.Mvvm.dll

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 inherit from ObservableObject, or it must be using ObservableObjectAttribute or INotifyPropertyChangedAttribute. If the containing type also implements the INotifyPropertyChanging (that is, if it either inherits from ObservableObject or is using ObservableObjectAttribute), then the generated code will also invoke OnPropertyChanging(PropertyChangingEventArgs) to signal that event.

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 => isEnabled;
    set => SetProperty(ref isEnabled, value);
}

}

[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
public sealed class ObservablePropertyAttribute : Attribute
Inheritance
ObservablePropertyAttribute
Inherited Members

Remarks

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).

Constructors

ObservablePropertyAttribute()

public ObservablePropertyAttribute()