ItemsControl с привязкой к данным ItemsSource и двусторонней привязкой элементов (заменяемые элементы)
У меня есть ObservableCollection объектов (например, люди с именем / фамилией), которые я хотел бы отобразить в ItemsControl. Каждый элемент отображается в пользовательском элементе управления "редактор", который позволяет редактировать свойства объекта. Эта часть работает нормально и довольно стандартно.
<ItemsControl ItemsSource="{Binding Persons}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<custom:PersonEditor Person="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Тем не менее, пользовательский элемент управления редактора также имеет возможность заменить весь полученный объект (вместо того, чтобы просто редактировать имя человека, заменить его новым объектом лица).
То, что я ищу, - это способ вернуть это изменение обратно в ObservableCollection. Как и сейчас, изменение объекта Person в редакторе не заменяет элемент в списке, что приведет к желаемому результату.
Любая помощь будет оценена.
1 ответ
Если у вас нет доступа к самому пользовательскому элементу управления, вы можете использовать установщик свойства, чтобы очистить ObservableCollection и повторно добавить элементы вместо прямой замены.
Например:
private ObservableCollection<MyModel> _dataSource;
public ObservableCollection<MyModel> DataSource
{
get
{
return _dataSource;
}
set
{
_dataSource.Clear();
foreach(var item in value)
{
_dataSource.Add(item);
}
}
}
Это предотвратит замену самого элемента, что вызовет проблемы с ItemSources, поскольку они, очевидно, связываются со свойством items только один раз.