Ejemplo n.º 1
0
        /// <summary>
        /// Binds <see cref="Model"/> to <see cref="CheckBox"/> to select current row.
        /// </summary>
        /// <param name="model">The model of the DataSet.</param>
        /// <returns>The row binding object.</returns>
        public static RowBinding <CheckBox> BindToCheckBox(this Model model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var trigger = new PropertyChangedTrigger <CheckBox>(CheckBox.IsCheckedProperty).WithAction(v =>
            {
                var binding = (TwoWayBinding)v.GetBinding();
                if (binding.IsRefreshing)
                {
                    return;
                }
                var isChecked = v.IsChecked;
                if (!isChecked.HasValue)
                {
                    return;
                }

                var isSelected = isChecked.GetValueOrDefault();
                var row        = v.GetRowPresenter();
                row.IsSelected = isSelected;
            });

            return(new RowBinding <CheckBox>(
                       onRefresh: (v, p) => v.IsChecked = p.IsSelected,
                       onSetup: (v, p) => trigger.Attach(v),
                       onCleanup: (v, p) => trigger.Detach(v)));
        }
Ejemplo n.º 2
0
        private static ScalarBinding <T> ToSelectAll <T>(this DataPresenter dataPresenter)
            where T : ToggleButton, new()
        {
            if (dataPresenter == null)
            {
                throw new ArgumentNullException(nameof(dataPresenter));
            }

            var trigger = new PropertyChangedTrigger <T>(ToggleButton.IsCheckedProperty).WithAction(v =>
            {
                var binding = (TwoWayBinding)v.GetBinding();
                if (binding.IsRefreshing)
                {
                    return;
                }
                var isChecked = v.IsChecked;
                if (!isChecked.HasValue)
                {
                    return;
                }

                var isSelected = isChecked.GetValueOrDefault();
                var rows       = dataPresenter.Rows;
                bool anyChange = false;
                for (int i = 0; i < rows.Count; i++)
                {
                    var row        = rows[i];
                    var oldValue   = row.IsSelected;
                    row.IsSelected = isSelected;
                    if (row.IsSelected != oldValue)
                    {
                        anyChange = true;
                    }
                }
                if (!anyChange)
                {
                    dataPresenter.InvalidateView();
                }
            });

            return(new ScalarBinding <T>(onRefresh: v =>
            {
                var selectedCount = dataPresenter.SelectedRows.Count;
                if (selectedCount == 0)
                {
                    v.IsChecked = false;
                }
                else if (selectedCount == dataPresenter.Rows.Count - (dataPresenter.VirtualRow != null ? 1 : 0))
                {
                    v.IsChecked = true;
                }
                else
                {
                    v.IsChecked = null;
                }
            },
                                         onSetup: v =>
            {
                trigger.Attach(v);
            },
                                         onCleanup: v =>
            {
                trigger.Detach(v);
            }));
        }