WPF-Control: сравнивать и объединять объекты - PullRequest
0 голосов
/ 24 января 2020

сначала небольшое вступление, чего я хочу добиться:

В настоящее время я работаю над WPF-приложением, где пользователь может импортировать данные из базы данных и объединять их с базой данных приложения.

Проблема в том, что пользователь может изменять Данные с обеих сторон. Так что могут быть различия, которые пользователь может не потерять. Теперь, прежде чем Пользователь сохранит импортированные данные, он должен иметь возможность сравнить Данные и выбрать правильные.

Таким образом, «инструмент слияния» должен содержать две таблицы, которые отображают Данные для каждого источника и связывают их через их Id. Ячейки с различиями следует пометить, установив их фон.


Мой первый подход заключался в создании объекта для каждого свойства, содержащего значение исходного свойства и статус изменения:

public class DataObject : Notify
{
    private readonly object _owner;
    private readonly PropertyInfo _propertyInfo;
    private bool _hasChanges;

    public object Value
    {
        get => GetProperty();
        set
        {
            SetProperty(value);
            HasChanges = true;
            OnPropertyChanged();
        }
    }

    public bool HasChanges
    {
        get => _hasChanges;
        set
        {
            if (_hasChanges != value)
            {
                _hasChanges = value;
                OnPropertyChanged();
            }
        }
    }

    public DataObject(string propertyName, object owner)
    {
        _owner = owner ?? throw new ArgumentNullException(nameof(owner));
        _propertyInfo = owner.GetType().GetProperty(propertyName);
    }

    private void SetProperty(object value)
    {
        _propertyInfo.SetValue(_owner, value);
    }

    private object GetProperty()
    {
        return _propertyInfo.GetValue(_owner);
    }
}

Затем я поместил эти объекты в DataTable, чтобы отобразить его в GridView.

Чтобы отобразить само значение, я реализовал перегрузку ToString-Overload для вызова ToString-Method of Value.


Теперь у меня есть несколько проблем:

  • Как отобразить сложные свойства?
  • Как установить цвет фона в зависимости от значения HasChanges свойство динамической c (автоматически сгенерированной) ячейки / столбца?

У кого-нибудь есть другое решение или идея? Или у кого-нибудь есть существующий элемент управления, который я могу использовать?

Спасибо за вашу помощь.

...