.NET Community Toolkit is a collection of helpers and APIs that work for all .NET developers and are agnostic of any specific UI platform. The toolkit is maintained and published by Microsoft, and part of the .NET Foundation.
System.ComponentModel.NotifyParentPropertyAttribute can only decorate a property but a ObservableProperty must be defined as a field so that a property can be generated automatically.
To allow them to work together, we should either provide a CommunityToolkit implementation of NotifyParentPropertyAttribute or allow ObservablePropertyAttribute to be used with a partial property (https://github.com/CommunityToolkit/dotnet/issues/555).
For now, the latter is infeasible as C# does not allow partial properties.
API breakdown
namespace CommunityToolkit.Mvvm.ComponentModel;
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
public sealed class NotifyParentPropertyAttribute : Attribute
{
public NotifyParentPropertyAttribute(bool notifyParent)
{
NotifyParent = notifyParent;
}
public bool NotifyParent { get; }
}
Usage example
public partial class ChildModel : ObservableObject
{
[ObservableProperty]
[NotifyParentChanged(true)]
private string _name;
}
public partial class ParentModel : ObservableObject
{
[ObservableProperty]
private ChildModel _child = new ();
}
When the Child.Name property gets updated, the ParentModel should be notified for the change of the Child property, i.e., OnPropertyChanged(nameof(Child)) should be called.
var parentModel = new ParentModel();
parentModel.Child.Name = "something"; // should call OnPropertyChanged(nameof(Child))
Breaking change?
No
Alternatives
Currently one has to choose between [NotifyParentChanged(true)] and [ObservableProperty].
Overview
System.ComponentModel.NotifyParentPropertyAttribute
can only decorate a property but aObservableProperty
must be defined as a field so that a property can be generated automatically.To allow them to work together, we should either provide a CommunityToolkit implementation of
NotifyParentPropertyAttribute
or allowObservablePropertyAttribute
to be used with a partial property (https://github.com/CommunityToolkit/dotnet/issues/555).For now, the latter is infeasible as C# does not allow partial properties.
API breakdown
Usage example
When the
Child.Name
property gets updated, theParentModel
should be notified for the change of theChild
property, i.e.,OnPropertyChanged(nameof(Child))
should be called.Breaking change?
No
Alternatives
Currently one has to choose between
[NotifyParentChanged(true)]
and[ObservableProperty]
.Additional context
No response
Help us help you
Yes, but only if others can assist