1
WPF 데이터 격자 (ControlBase라는 기본 클래스에서 파생 된 사용자 정의 컨트롤에서 호스팅 됨)에 드롭 다운 열을 가져와서 올바르게 바인딩하려고합니다. 처음에는 개체에서 벌금을 채우고 셀을 편집 할 때 채워진 드롭 다운이 나타납니다. 그러나 포커스를 유지하면 선택한 값이 다시 셀로 들어 가지 않습니다.WPF DataGrid 드롭 다운 양방향 바인딩
은 여기 내 모델과 도메인 객체이다 :
public UserControlModel _model;
public UserControlModel Model
{
set
{
_model = value;
DataContext = null;
DataContext = _model;
}
}
여기 XAML에서 내 데이터 그리드의 열 정의입니다 :
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를 설정<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>
그리드 행에 선택한 콤보 박스 값을 연결하는 데 문제가있는 것으로 생각됩니다. 그러나 나는 그것을 끌어들이려고 서클 주위에 갔다. 어떤 조언을 주시면 감사하겠습니다.
코리.
작품! 감사. 셀을 클릭했을 때 드롭 다운에서 셀 내용을 이미 선택 했습니까? 그렇지 않으면 셀을 클릭 할 때 펼칠 때까지 드롭 다운에 빈 선택이 표시됩니다. – cardinalPilot
'SelectedItem' 대신'SelectedValue'를 사용할 수 있습니다. 그런 식으로 작동하지만, ViewModel에'public int PersonId' 속성이 있어야합니다. –
도메인 클래스는 EF Code First의 POCO입니다. EF는 PersonId 속성과 Person 속성을 클래스에 포함 할 수있을만큼 스마트하고 데이터베이스 스키마를 망가 뜨리지는 않습니다. – cardinalPilot