2013-03-20 3 views
1

Я пытаюсь получить столбец выпадающего списка в 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 к строке сетки, но я пошел кругами, пытаясь подключить его. Любой совет будет принят во внимание.

Кори.

ответ

1

Вы пропускаете SelectedItem или SelectedValue связывания:

<ComboBox ItemsSource="{Binding Path=DataContext.Persons, 
         RelativeSource={RelativeSource AncestorType={x:Type uch:ControlBase}}}" 
         DisplayMemberPath="Name" 
        --> SelectedItem="{Binding ContactPerson}" <-- 
         SelectedValuePath="Id" /> 
+0

Works! Благодарю. Есть ли в любом случае, чтобы содержимое ячеек было выбрано в раскрывающемся списке, когда я нажимаю на ячейку? В противном случае, когда я нажимаю на ячейку, в раскрывающемся списке отображается пустой выбор, пока я не разворачиваю его. – cardinalPilot

+1

Вы можете использовать 'SelectedValue' вместо' SelectedItem', и он будет работать именно так, но вам нужно иметь свойство public public Person в ViewModel. –

+0

Классы домена - это POCO для EF Code First. Является ли EF достаточно умным, чтобы иметь свойство PersonId и свойство Person в классе и не испортить схему базы данных? – cardinalPilot

Смежные вопросы