Files
PropertyGrid/COMPLETE_FIX_SUMMARY.md
2026-08-10 14:46:18 +02:00

8.2 KiB

PropertyGrid - Complete Fix Summary

All Issues Fixed ✅

1. ✅ PropertyGrid Not Showing Properties

Problem: PropertyGrid rendered as empty/invisible Root Cause: Control template and styles were never loaded Fix: Added <StyleInclude Source="avares://Avalonia.PropertyGrid/Controls/PropertyGrid.axaml" /> to App.axaml files

2. ✅ SelectedObject Binding Not Working

Problem: XAML binding {Binding} wasn't setting SelectedObject Root Cause: Compiled bindings with custom controls had timing issues Fix: Set PropertyGrid.SelectedObject directly in code after Window.Opened event

3. ✅ Property Values Not Displaying

Problem: Properties listed but no editors/values shown Root Cause: No DataTemplate for rendering PropertyItem values Fix: Added TextBox editor in ContentControl for displaying/editing values

4. ✅ Nested Properties Only Expand Once

Problem: Expanding nested properties worked first time only Root Cause: Condition Children.Count == 0 prevented re-insertion Fix: Separated loading children (once) from displaying children (every time)

Files Modified

File Changes
Examples/QuickStartExample/App.axaml Added StyleInclude for PropertyGrid
Examples/AdvancedExample/App.axaml Added StyleInclude for PropertyGrid
Examples/QuickStartExample/MainWindow.axaml.cs Direct SelectedObject assignment, FindDescendantOfType helper
Examples/AdvancedExample/MainWindow.axaml.cs Direct SelectedObject assignment, FindDescendantOfType helper
Avalonia.PropertyGrid/Controls/PropertyGrid.axaml Simplified editor to TextBox, added debug counter
Avalonia.PropertyGrid/Controls/PropertyGrid.axaml.cs Fix nested expansion logic, added debug output
Avalonia.PropertyGrid/Converters/PropertyGridConverters.cs Added type converters (not used in current simple version)

Current Implementation

PropertyGrid Features

✅ Search box - Filter properties by name
✅ Property display - Shows property names with descriptions
✅ Simple TextBox editor - Edit all property values as text
✅ Nested objects - Expand/collapse complex properties repeatedly
✅ Debug counter - Shows "Properties: X" count at top
✅ Categories - Properties organized by category
✅ Read-only support - TextBox disabled for read-only properties

PropertyGrid Limitations (Current Simple Version)

⚠️ No specialized editors - Everything uses TextBox (booleans, enums, numbers all show as text)
⚠️ No category grouping UI - Categories exist in data but not visually grouped
⚠️ No validation feedback - Validation attributes exist but no visual indicators
⚠️ Basic styling - Functional but minimal visual polish

Quick Reference

Run QuickStartExample

dotnet run --project Examples/QuickStartExample/QuickStartExample.csproj

Expected:

  • Window with PropertyGrid
  • Search box and "Properties: 10" counter
  • 10 Vehicle properties displayed:
    • Make, Model, Year, Color, Mileage (TextBox)
    • IsElectric (TextBox showing "True" or "False")
    • FuelType (TextBox showing enum value)
    • Price, PurchaseDate, VIN
  • All editable (except VIN which is read-only)

Run AdvancedExample

dotnet run --project Examples/AdvancedExample/AdvancedExample.csproj

Expected:

  • Window with PropertyGrid
  • Search box and "Properties: 25+" counter
  • 25+ AdvancedConfiguration properties
  • Nested objects (NetworkSettings, DatabaseSettings) with expand/collapse
  • Can expand/collapse repeatedly ✅

Debug Output

When running either example, you should see console output like:

PropertyGrid found and SelectedObject set directly
PropertyGrid: SelectedObject changed to Vehicle
PropertyGrid: Created 10 property items
PropertyGrid: FilteredProperties count = 10

When expanding nested properties:

HandlePropertyExpansion: Network Settings, IsExpanded=true, Children.Count=0
  Loaded 4 children for Network Settings
  Inserted 4 children into FilteredProperties at index 11

Next Steps (Future Enhancements)

Priority 1: Specialized Editors

  • CheckBox for boolean properties
  • ComboBox for enum properties
  • NumericUpDown for numeric properties
  • DatePicker for DateTime properties

Priority 2: Visual Improvements

  • Category headers with expand/collapse
  • Alternating row colors
  • Hover effects
  • Selection highlighting
  • Better spacing and padding

Priority 3: Advanced Features

  • Validation error display (red border, tooltip)
  • Property value converters (format numbers, dates)
  • Custom property editors
  • Multi-object editing
  • Property reset to default
  • Undo/Redo support

Priority 4: Performance

  • Virtualization for large property lists
  • Lazy loading of nested properties
  • Property value caching

Architecture

Data Flow

MainWindow
  ├─ DataContext = Vehicle/AdvancedConfiguration
  └─ PropertyGrid
	  ├─ SelectedObject set in Window.Opened
	  ├─ RefreshProperties() called
	  ├─ PropertyItemFactory creates PropertyItem list
	  ├─ FilterProperties() populates FilteredProperties
	  └─ ItemsControl displays items
		  └─ DataTemplate renders each PropertyItem
			  ├─ Left: Property name
			  └─ Right: TextBox editor

Classes

PropertyGrid (PropertyGrid.axaml.cs)

  • Main control
  • Properties: SelectedObject, FilteredProperties, SearchText
  • Methods: RefreshProperties(), FilterProperties(), HandlePropertyExpansion()

PropertyItem (PropertyItem.cs)

  • Represents one property
  • Properties: Name, DisplayName, Value, PropertyType, IsReadOnly, IsExpandable, Children
  • Implements INotifyPropertyChanged

PropertyItemFactory (PropertyItemFactory.cs)

  • Static factory methods
  • CreatePropertyItems(object) → List
  • Uses reflection to discover properties
  • Reads attributes: [Display], [Category], [ReadOnly], [Range], etc.

Build Status

✅ All projects build successfully
✅ No compilation errors
✅ No runtime exceptions

Known Working Features

Feature Status Notes
Display properties ✅ Works All public properties shown
Edit properties ✅ Works TextBox for all types
Read-only properties ✅ Works TextBox disabled
Property descriptions ✅ Works Shown in tooltip
Property categories ✅ Works In data model
Search/filter ✅ Works By property name
Nested objects ✅ Works Expand/collapse repeatedly
Property ordering ✅ Works Via [Display(Order=)]
Data binding ✅ Works Two-way binding to Value
INotifyPropertyChanged ✅ Works Updates propagate

Known Limitations

Limitation Impact Workaround
All editors are TextBox Booleans/enums show as text Type correct text value
No category grouping Properties in flat list Use search to filter
No validation UI Errors not visible Check debug output
Basic styling Looks functional not polished Future enhancement

Troubleshooting

PropertyGrid is empty

  1. Check debug output - should see "Created X property items"
  2. Check "Properties: X" counter at top
  3. Verify StyleInclude in App.axaml

Properties don't update when changed

  1. Ensure model implements INotifyPropertyChanged
  2. Check PropertyInfo.SetValue is called
  3. Verify two-way binding on TextBox

Nested properties don't expand

  1. Check IsExpandable is true
  2. Verify PropertyType is complex (not simple type)
  3. Check debug output for HandlePropertyExpansion

Search doesn't work

  1. Type in search box
  2. Check FilterProperties() is called
  3. Verify property names/categories match search text

Summary

The PropertyGrid is now fully functional with basic editing capabilities:

  • ✅ Displays all properties
  • ✅ Edits property values via TextBox
  • ✅ Supports nested objects with expand/collapse
  • ✅ Filters properties via search
  • ✅ Respects read-only properties
  • ✅ Shows descriptions and categories

Status: WORKING - Ready for use and future enhancements!


Created: 2024
Last Updated: After nested property expansion fix
Total fixes: 4 major issues resolved