Skip to content

Inherited ViewModels can hide important warnings #451

Open
@MisinformedDNA

Description

@MisinformedDNA

Describe the bug

If an ObservableProperty is created in two ViewModels, a parent and child, then the parent property gets hidden and the warning is blocked from the user.

Regression

No response

Steps to reproduce

For this code:


public partial class ParentViewModel : ObservableObject
{
    [ObservableProperty] private int _someValue;
    public int AnotherValue { get; set; }
}

public partial class DerivedViewModel : ParentViewModel
{
    [ObservableProperty] private int _someValue;
    public int AnotherValue { get; set; }
}


The following warning is generated:

> 'DerivedViewModel.AnotherValue' hides inherited member 'ParentViewModel.AnotherValue'. Use the new keyword if hiding was intended.

Expected behavior

The following warning should also be generated:

'DerivedViewModel.SomeValue' hides inherited member 'ParentViewModel.SomeValue'. Use the new keyword if hiding was intended.

Screenshots

No response

IDE and version

VS 2022

IDE version

17.3.0

Nuget packages

  • CommunityToolkit.Common
  • CommunityToolkit.Diagnostics
  • CommunityToolkit.HighPerformance
  • CommunityToolkit.Mvvm (aka MVVM Toolkit)

Nuget package version(s)

8.0.0

Additional context

This is due to warnings being disabled with

#pragma warning disable

Fix options:

  1. The pragma is enabled for this warning

    • Pros: Warning might alert the user to unintended functionality
    • Cons: User can't suppress the warning
  2. Option 1 plus ObservableProperty is modified to accept a parameter that says whether hiding is desired

    • Pros: The warning is exposed and can be suppressed
    • Cons: May not be worth the complication

Help us help you

Yes, I'd like to be assigned to work on this item

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug 🐛An unexpected issue that highlights incorrect behaviormvvm-toolkit 🧰Issues/PRs for the MVVM Toolkit

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions