Frequently Asked Questions
Data Updates
Q: TreeDataGrid doesn't update when I change model properties
Problem: You're modifying properties on your data objects, but the grid doesn't reflect the changes.
Solution: Your data model must implement INotifyPropertyChanged. The TreeDataGrid relies on property change notifications to update the UI.
// ❌ Wrong - No property change notifications
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
// ✅ Correct - Implements INotifyPropertyChanged
public class Person : INotifyPropertyChanged
{
    private string _name;
    private int _age;
    public string Name
    {
        get => _name;
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged();
            }
        }
    }
    public int Age
    {
        get => _age;
        set
        {
            if (_age != value)
            {
                _age = value;
                OnPropertyChanged();
            }
        }
    }
    public event PropertyChangedEventHandler? PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
Q: New items don't appear when I add them to the collection
Problem: You're adding items to a List<T> or array, but the grid doesn't show new items.
Solution: Use ObservableCollection<T> instead, which automatically notifies the grid of collection changes.
// ❌ Wrong - List doesn't notify of changes
private List<Person> _people = new List<Person>();
// ✅ Correct - ObservableCollection notifies of changes
private ObservableCollection<Person> _people = new ObservableCollection<Person>();
Cell Editing
Q: Cell editing doesn't work when I click on cells
Problem: Clicking cells doesn't begin editing.
Solution: Make sure you've provided both a getter and setter in the column definition:
// ❌ Wrong - No setter, column is read-only
new TextColumn<Person, string>("Name", x => x.Name)
// ✅ Correct - Has both getter and setter
new TextColumn<Person, string>(
    "Name",
    x => x.Name,
    (row, value) => row.Name = value)
You may also need to specify the edit gesture:
new TextColumn<Person, string>(
    "Name",
    x => x.Name,
    (row, value) => row.Name = value,
    options: new TextColumnOptions<Person>
    {
        BeginEditGestures = BeginEditGestures.Tap
    })