.NET Community Toolkit 8.2 版正式發布!新版本包括在運行時和MVVM Toolkit 源碼生成器中的性能改進、新程式碼修復程式、新的用戶請求功能等內容。
.NET 社區工具包是一組適用於所有.NET 開發人員,且與不綁定UI 平台的幫助程式和API。該工具包由Microsoft 維護和發布,是.NET 基金會的一部分,它被多個微軟內部項目和應用程式使用,例如Microsoft Store。
.NET 社區工具包的所有庫最初都是Windows 社區工具包的一部分,但隨著時間的推移,僅針對.NET 且不特定於Windows 的API 數量不斷增加,微軟決定將.NET 相關的內容拆分到一個單獨的項目中,以便它們可以獨立發展,.NET Community Toolkit 由此誕生。
[RelayCommand]
的自定義屬性
新的8.2.0 版本的MVVM 工具包在使用 [RelayCommand]
時包括對自定義屬性的支援,利用原生的 field:
和 property:
C# 語法來指示自定義屬性的目標。這樣一來,在使用 [RelayCommand]
生成MVVM 命令時,可以完全控制所有生成成員的屬性。
比如
[RelayCommand]
[property: JsonIgnore]
private void DoWork()
{
// Do some work here...
}
會生成如下成員,且生成的 DoWorkCommand
屬性具有指定的屬性
private RelayCommand? _doWorkCommand;
[JsonIgnore]
public IRelayCommand DoWorkCommand => _doWorkCommand ??= new RelayCommand(DoWork);
相關文檔
新的 [ObservableProperty]
更改hook
MVVM 中一個相對常見的場景是有一些“選擇的項目”可觀察屬性,例如當前選擇的用戶,或嵌套的視圖模型。當此屬性的值發生變化時,還必須對新舊實例進行一些調整。例如,設置一些“selected”屬性,或者訂閱事件。
以前,在這種情況下使用 [ObservableProperty]
並不理想,因為它沒有必要的基礎設施,來輕鬆注入此類邏輯以對設置的舊值和新值執行必要的狀態更改。
為了解決這個問題,從MVVM 工具包的8.2 版本開始,為所有 [ObservableProperty]
字段生成了兩個新的屬性更改hook。示例:
[ObservableProperty]
private DocumentViewModel _selectedDocument;
現在將生成如下程式碼:
public DocumentViewModel SelectedDocument
{
get => _selectedDocument;
set
{
if (!EqualityComparer<DocumentViewModel>.Default.Equals(_selectedDocument, value))
{
DocumentViewModel? oldValue = _selectedDocument;
OnNameChanging(value);
OnNameChanging(oldValue, value);
OnPropertyChanging();
_selectedDocument = value;
OnNameChanged(value);
OnNameChanged(oldValue, value);
OnPropertyChanged();
}
}
}
partial void OnSelectedDocumentChanging(DocumentViewModel value);
partial void OnSelectedDocumentChanged(DocumentViewModel value);
partial void OnSelectedDocumentChanging(DocumentViewModel? oldValue, DocumentViewModel newValue);
partial void OnSelectedDocumentChanged(DocumentViewModel? oldValue, DocumentViewModel newValue);
注意正在生成的兩個新的“OnPropertyNameChanging”和“Changed”方法,這兩個提供了易於使用的hook,用於注入在每個屬性更改事件上觸發的程式碼,且可以修改正在設置的舊值和新值。
MVVM 工具包程式碼修復器
之前版本的MVVM Toolkit 添加了兩個新的診斷分析器,它們會在錯誤訪問標有 [ObservableProperty]
的字段,以及在使用聲明具有 [ObservableProperty]
和類似屬性的類型時產生警告。
在8.2 版本中,這兩個分析器還包括內置的程式碼修復器。只需將鼠標懸停在IntelliSense 燈泡上,選擇程式碼修復,該功能會自動應用所有更改,以使程式碼恢復到正確的狀態。支援批量修復:
MVVM 工具包源程式碼生成器優化
MVVM Toolkit 8.2 還對其源程式碼生成器進行了一些性能改進。這一次重點是優化增量管道,以最大限度地減少內存使用,並確保不會在並發執行中保持不必要的對象。
以下是一些用於改進這一點的PR:
- 將剩餘的診斷移至分析器 ( #581 ):MVVM 工具包中的另外兩個診斷已移至診斷分析器,該分析器可以同時運行並在進程外運行。
- 在分析器中儘早解析符號 ( #587 ):所有必要的分析器符號現在都在初始回調設置期間解析,加快了每個編譯實例中的回調執行。
其他改動和改進可在發佈公告中查閱。
#NET #社區工具包82 #發布帶來程式碼修復器性能改進 #科技資訊
You may also like
No related posts.