[MVVM] `AttachedProperty`/`DirectProperty`/`StyledProperty` source generators
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia con l’analisi dell’API e l’esempio di utilizzo di QuxControl.cs, quindi confronta l’output generato proposto con la struttura esistente del toolkit. L’issue non indica file di implementazione né test, quindi il primo compito è individuare i punti di ingresso del source-generator e i progetti di test pertinenti. Il lavoro è completo quando sono supportati i tre attributi e vengono prodotti i membri property e Avalonia property mostrati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Overview
Examples like these require a considerable amount of repetitive code:
public bool Foo
{
get => GetValue(FooProperty);
set => SetValue(FooProperty, value);
}
public ObservableCollection<BarViewModel>? BarsSource
{
get => GetValue(BarsSourceProperty);
set => SetValue(BarsSourceProperty, value);
}
public ICommand? BazCommand
{
get => GetValue(BazCommandProperty);
set => SetValue(BazCommandProperty, value);
}
public static readonly StyledProperty<bool> FooProperty =
AvaloniaProperty.Register<QuxControl, bool>(nameof(Foo));
public static readonly StyledProperty<ObservableCollection<BarViewModel>?> BarsSourceProperty =
AvaloniaProperty.Register<QuxControl, ObservableCollection<BarViewModel>?>(nameof(BarsSource));
public static readonly StyledProperty<ICommand?> BazCommandProperty =
AvaloniaProperty.Register<QuxControl, ICommand?>(nameof(BazCommand));
API breakdown
namespace CommunityToolkit.Mvvm.ComponentModel;
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class AttachedPropertyAttribute : Attribute;
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class DirectPropertyAttribute : Attribute;
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class StyledPropertyAttribute : Attribute;
Usage example
QuxControl.cs
public partial class QuxControl : Panel
{
[StyledProperty]
public partial bool Foo { get; set; }
[StyledProperty]
public partial ObservableCollection<BarViewModel>? BarsSource { get; set; }
[StyledProperty]
public partial ICommand? BazCommand { get; set; }
}
MyProject.Views.QuxControl.g.cs
namespace MyProject.Views
{
partial class QuxControl
{
/* ... */
public partial bool Foo
{
get => GetValue(FooProperty);
set => SetValue(FooProperty, value);
}
/* ... */
public partial ObservableCollection<BarViewModel>? BarsSource
{
get => GetValue(BarsSourceProperty);
set => SetValue(BarsSourceProperty, value);
}
/* ... */
public partial ICommand? BazCommand
{
get => GetValue(BazCommandProperty);
set => SetValue(BazCommandProperty, value);
}
/* ... */
public static readonly StyledProperty<bool> FooProperty =
AvaloniaProperty.Register<QuxControl, bool>(nameof(Foo));
/* ... */
public static readonly StyledProperty<ObservableCollection<BarViewModel>?> BarsSourceProperty =
AvaloniaProperty.Register<QuxControl, ObservableCollection<BarViewModel>?>(nameof(BarsSource));
/* ... */
public static readonly StyledProperty<ICommand?> BazCommandProperty =
AvaloniaProperty.Register<QuxControl, ICommand?>(nameof(BazCommand));
}
}
Breaking change?
No
Alternatives
There are existing packages (https://github.com/jp2masa/Avalonia.PropertyGenerator, https://github.com/lucdem/AvaSourceGenerators) that don't entirely work in the proposed way.
Additional context
No response
Help us help you
No, just wanted to propose this
- Lingua principale
- C#
- Stelle
- 3.8k
- Fork
- 401
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di CommunityToolkit/dotnet
-
RelayCommand<T>.CanExecute(null) returns false for value types without a predicateForse già presa @apachezy l’ha presa 86 giorni fa. Apertabug :bug:
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
CommunityToolkit/dotnet#1206 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
CommunityToolkit/dotnet#1186 ·
-
bug :bug:
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
CommunityToolkit/dotnet#648 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
CommunityToolkit/dotnet#1217 ·
-
bug :bug:
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
CommunityToolkit/dotnet#1215 ·
Tutte le issue di CommunityToolkit/dotnet
Issue simili
-
area-TableView bug needs-triage team-Controls
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
microsoft/microsoft-ui-xaml#12351 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
AudioClient and ImageClient file path overloads send the full local path as the multipart file nameForse già presa @sebxt l’ha presa oggi. Apertaarea: audio area: images feature-request
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
openai/openai-dotnet#1453 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
elsa-workflows/elsa-foundation#3130 ·
I maintainer di solito rispondono entro 1 giorno
-
遥测历史查询始终返回 HTTP 400,页面静默无结果Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100