сначала небольшое вступление, чего я хочу добиться:
В настоящее время я работаю над 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 (автоматически сгенерированной) ячейки / столбца?
У кого-нибудь есть другое решение или идея? Или у кого-нибудь есть существующий элемент управления, который я могу использовать?
Спасибо за вашу помощь.