From dfafee8c4412ebd2cb2345f40a79464091d7017e Mon Sep 17 00:00:00 2001 From: Waheed Ahmad Date: Thu, 21 Nov 2024 08:00:45 +0500 Subject: [PATCH] convert Row and Cell dependency properties to standard properties --- src/WinUI.TableView/TableViewCell.cs | 44 ++++++++++++--------------- src/WinUI.TableView/TableViewRow.cs | 45 +++++++++++++++------------- 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/WinUI.TableView/TableViewCell.cs b/src/WinUI.TableView/TableViewCell.cs index f9a1356..eb9e2f1 100644 --- a/src/WinUI.TableView/TableViewCell.cs +++ b/src/WinUI.TableView/TableViewCell.cs @@ -18,6 +18,7 @@ namespace WinUI.TableView; [TemplateVisualState(Name = VisualStates.StateUnselected, GroupName = VisualStates.GroupSelection)] public class TableViewCell : ContentControl { + private TableViewColumn? _column; private ScrollViewer? _scrollViewer; private ContentPresenter? _contentPresenter; @@ -289,18 +290,15 @@ internal void UpdateElementState() Column?.UpdateElementState(this); } - private static void OnColumnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + private void OnColumnChanged() { - if (d is TableViewCell cell) + if (TableView?.IsEditing == true) { - if (cell.TableView?.IsEditing == true) - { - cell.SetEditingElement(); - } - else - { - cell.SetElement(); - } + SetEditingElement(); + } + else + { + SetElement(); } } @@ -315,23 +313,19 @@ private static void OnColumnChanged(DependencyObject d, DependencyPropertyChange public TableViewColumn? Column { - get => (TableViewColumn?)GetValue(ColumnProperty); - set => SetValue(ColumnProperty, value); + get => _column; + internal set + { + if (_column != value) + { + _column = value; + OnColumnChanged(); + } + } } - public TableViewRow? Row - { - get => (TableViewRow?)GetValue(TableViewRowProperty); - set => SetValue(TableViewRowProperty, value); - } + public TableViewRow? Row { get; internal set; } - public TableView? TableView - { - get => (TableView?)GetValue(TableViewProperty); - set => SetValue(TableViewProperty, value); - } + public TableView? TableView { get; internal set; } - public static readonly DependencyProperty ColumnProperty = DependencyProperty.Register(nameof(Column), typeof(TableViewColumn), typeof(TableViewCell), new PropertyMetadata(default, OnColumnChanged)); - public static readonly DependencyProperty TableViewRowProperty = DependencyProperty.Register(nameof(Row), typeof(TableViewRow), typeof(TableViewCell), new PropertyMetadata(default)); - public static readonly DependencyProperty TableViewProperty = DependencyProperty.Register(nameof(TableView), typeof(TableView), typeof(TableViewCell), new PropertyMetadata(default)); } diff --git a/src/WinUI.TableView/TableViewRow.cs b/src/WinUI.TableView/TableViewRow.cs index cc19f14..76dbbee 100644 --- a/src/WinUI.TableView/TableViewRow.cs +++ b/src/WinUI.TableView/TableViewRow.cs @@ -10,6 +10,7 @@ namespace WinUI.TableView; public class TableViewRow : ListViewItem { + private TableView? _tableView; private TableViewCellsPresenter? _cellPresenter; private bool _ensureCells = true; @@ -168,32 +169,30 @@ private void AddCells(IEnumerable columns, int index = -1) } } - private static void OnTableViewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + private void OnTableViewChanging() { - if (d is not TableViewRow row) + if (TableView is not null) { - return; - } - - if (e.NewValue is TableView newTableView) - { - newTableView.IsReadOnlyChanged += row.OnTableViewIsReadOnlyChanged; + TableView.IsReadOnlyChanged -= OnTableViewIsReadOnlyChanged; - if (newTableView.Columns is not null) + if (TableView.Columns is not null) { - newTableView.Columns.CollectionChanged += row.OnColumnsCollectionChanged; - newTableView.Columns.ColumnPropertyChanged += row.OnColumnPropertyChanged; + TableView.Columns.CollectionChanged -= OnColumnsCollectionChanged; + TableView.Columns.ColumnPropertyChanged -= OnColumnPropertyChanged; } } + } - if (e.OldValue is TableView oldTableView && oldTableView.Columns is not null) + private void OnTableViewChanged() + { + if (TableView is not null) { - oldTableView.IsReadOnlyChanged -= row.OnTableViewIsReadOnlyChanged; + TableView.IsReadOnlyChanged += OnTableViewIsReadOnlyChanged; - if (oldTableView.Columns is not null) + if (TableView.Columns is not null) { - oldTableView.Columns.CollectionChanged -= row.OnColumnsCollectionChanged; - oldTableView.Columns.ColumnPropertyChanged -= row.OnColumnPropertyChanged; + TableView.Columns.CollectionChanged += OnColumnsCollectionChanged; + TableView.Columns.ColumnPropertyChanged += OnColumnPropertyChanged; } } } @@ -234,9 +233,15 @@ internal void ApplyCellsSelectionState() public TableView? TableView { - get => (TableView?)GetValue(TableViewProperty); - set => SetValue(TableViewProperty, value); + get => _tableView; + internal set + { + if (_tableView != value) + { + OnTableViewChanging(); + _tableView = value; + OnTableViewChanged(); + } + } } - - public static readonly DependencyProperty TableViewProperty = DependencyProperty.Register(nameof(TableView), typeof(TableView), typeof(TableViewRow), new PropertyMetadata(default, OnTableViewChanged)); }