Учитывая следующие классы ниже, я ищу лучший способ сохранить Параметры из ExecuteQuery
класса в синхронизации c с Параметры из Query
класса.
Я работаю в проекте WPF с использованием двух представлений и моделей представления, одно представление - определение модели Query
, привязка DataGrid к Parameters
. Другое представление - определить модель ExecuteQuery
, в которой есть ComboBox для выбора целевого объекта Query
. Как только он выбран, я хочу скопировать параметры из запроса в ExecuteQuery, чтобы он синхронизировался, и любое изменение коллекции и свойств можно было отслеживать и отражать в ExecuteQuery соответствующим образом.
public class NameParameter : Entity
{
private string _name;
public string Name
{
get => _name;
set => SetProperty(ref _name, value);
}
}
public class KeyValueParameter : ClientEntity
{
private string _name;
public string Name
{
get => _name;
set => SetProperty(ref _name, value);
}
private string _value;
public string Value
{
get => _value;
set => SetProperty(ref _value, value);
}
}
public class Query
{
private ObservableCollection<NameParameter> _parameters = new ObservableCollection<NameParameter>();
public IEnumerable<NameParameter> Parameters => _parameters.AsEnumerable();
public void AddParameter()
{
_parameters.Add(new NameParameter());
}
}
public class ExecuteQuery
{
private Query _query;
public Query Query
{
get => _query;
set => SetProperty(ref _query, value);
}
private ObservableCollection<KeyValueParameter> _parameters = new ObservableCollection<KeyValueParameter>();
public IEnumerable<KeyValueParameter> Parameters => _parameters.AsEnumerable();
}
Пока я использовал Automapper для сопоставления различных типов со следующей конфигурацией, но я все еще не уверен, что это правильный способ решения этой проблемы.
var configuration = new MapperConfiguration(cfg => {
cfg.AllowNullCollections = true;
cfg.CreateMap<NameParameter, KeyValueParameter>()
.ForMember(d => d.Value, o => o.Ignore());
});
Я могу добиться этого с некоторыми усилиями, но задавая этот вопрос здесь, чтобы узнать экспертное решение для решения такой повторяющейся проблемы с минимальными изменениями кода и определить любой шаблон, который использует большинство людей.