private object CreateDataRow(object item)
        {
            var dataRow = new ListBoxDataRow();

            InvokeRenderItem(dataRow, item);
            return(dataRow);
        }
        private void InvokeRenderItem(ListBoxDataRow dataRow, object item)
        {
            var value   = item.GetProperty(ValueProperty);
            var display = item.GetProperty(DisplayProperty);

            var itemUpdateArgs = new RenderItemRoutedEventArgs(OnRenderItemEvent)
            {
                Item    = item,
                Value   = value,
                Display = display
            };

            RaiseEvent(itemUpdateArgs);

            dataRow.Item    = item;
            dataRow.Value   = itemUpdateArgs.Value;
            dataRow.Display = itemUpdateArgs.Display;
        }
        private void UpdateCheckDataRows()
        {
            UpdateDataRows(() =>
            {
                var editValue = EditValue;

                if (MultiSelect)
                {
                    var checkedValues = ObjectAsCollection(editValue);

                    foreach (ListBoxDataRow dataRow in _dataRows)
                    {
                        var dataRowChecked = (checkedValues != null) && checkedValues.Contains(dataRow.Value);

                        dataRow.Checked = dataRowChecked;
                    }
                }
                else
                {
                    ListBoxDataRow selectedDataRow = null;

                    foreach (ListBoxDataRow dataRow in _dataRows)
                    {
                        var dataRowChecked = Equals(dataRow.Value, editValue);

                        if (dataRowChecked)
                        {
                            selectedDataRow = dataRow;
                        }

                        dataRow.Checked = dataRowChecked;
                    }

                    SelectDataRow(selectedDataRow);
                }
            }, true);
        }