CommunityToolkit / CommunityToolkit/dotnet
ObservableObject annotation with record not generating OnPropertyChanged and OnPropertyChanging invokers
- Dominant language
- C#
- Stars
- 3.8k
- Forks
- 400
- PR merge metrics
- No merged PRs in 30d
Description
### Describe the bug
When using the annotations `[ObservableObject]` and `[ObservableProperty]` in a `class`, it correctly generates (at least) two files. One containing the property which when set calls the functions OnPropertyChanging/OnPropertyChanged and another one containing those functions and the handlers for those events.
If we change the `class` to a `record`, the first file is correctly generated but not the second, causing the OnPropertyChanging/OnPropertyChanged calls not to compile.
Here's an example project: [ObservablePropertyInRecord.zip](https://github.com/CommunityToolkit/dotnet/files/13213997/ObservablePropertyInRecord.zip)
Changing the RecordViewModel from a `record` to a `class` behaves as expected.
### Regression
_No response_
### Steps to reproduce
```text
Example steps to reproduce:
1. Create a `public partial record` with the `[ObservableObject]` annotation
2. Create a variable with the `[ObservableProperty]` annotation
3. Code should not compile and give the errors:
CS0103 The name 'OnPropertyChanging' does not exist in the current context
CS0103 The name 'OnPropertyChanged' does not exist in the current context
```
### Expected behavior
The code generator successfully creates the handlers for a `record` as it does for a `class`.
### Screenshots
ViewModel as a `class`:

Generated code:


ViewModel as a `record`:

Generated code (the second file is missing):


### IDE and version
VS 2022
### IDE version
17.7.6
### Nuget packages
- [ ] CommunityToolkit.Common
- [ ] CommunityToolkit.Diagnostics
- [ ] CommunityToolkit.HighPerformance
- [X] CommunityToolkit.Mvvm (aka MVVM Toolkit)
### Nuget package version(s)
8.2.2
### Additional context
_No response_
### Help us help you
No, just wanted to report this
Contributor guide
Assessment
This issue has not been assessed yet.