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
- Check debug output - should see "Created X property items"
- Check "Properties: X" counter at top
- Verify StyleInclude in App.axaml
Properties don't update when changed
- Ensure model implements INotifyPropertyChanged
- Check PropertyInfo.SetValue is called
- Verify two-way binding on TextBox
Nested properties don't expand
- Check IsExpandable is true
- Verify PropertyType is complex (not simple type)
- Check debug output for HandlePropertyExpansion
Search doesn't work
- Type in search box
- Check FilterProperties() is called
- 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