Я пытаюсь получить столбец выпадающего списка в WPF datagrid (размещенный в пользовательском элементе управления, основанный на базовом классе ControlBase) для правильной привязки. Сначала он заполняет объект прекрасным образом, и при редактировании ячейки появляется всплывающее раскрывающееся меню, но выбранное значение не возвращается в ячейку, когда я покидаю фокус.WPF datagrid dropdown двусторонняя привязка
Вот мои модели и доменные объекты:
public class ModelBase : INotifyPropertyChanged
{
public IList<Person> Persons { get; set; }
}
public class UserControlModel : ModelBase
{
public ObservableCollection<DatagridRecord> SourceData { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class DatagridRecord
{
public string Name { get; set; }
public Person ContactPerson { get; set; }
}
И в моем xaml.cs, я поставил DataContext через свойство Model:
public UserControlModel _model;
public UserControlModel Model
{
set
{
_model = value;
DataContext = null;
DataContext = _model;
}
}
Вот мое DataGrid определения столбца в XAML:
<DataGridTemplateColumn Header="Person" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ContactPerson.Name}"/></DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.Persons,
RelativeSource={RelativeSource AncestorType={x:Type uch:ControlBase}}}"
DisplayMemberPath="Name"
SelectedValuePath="Id" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Я полагаю, что что-то не так с привязкой выделенного значения combobox к строке сетки, но я пошел кругами, пытаясь подключить его. Любой совет будет принят во внимание.
Кори.
Works! Благодарю. Есть ли в любом случае, чтобы содержимое ячеек было выбрано в раскрывающемся списке, когда я нажимаю на ячейку? В противном случае, когда я нажимаю на ячейку, в раскрывающемся списке отображается пустой выбор, пока я не разворачиваю его. – cardinalPilot
Вы можете использовать 'SelectedValue' вместо' SelectedItem', и он будет работать именно так, но вам нужно иметь свойство public public Person в ViewModel. –
Классы домена - это POCO для EF Code First. Является ли EF достаточно умным, чтобы иметь свойство PersonId и свойство Person в классе и не испортить схему базы данных? – cardinalPilot