2013-04-30 2 views
0

DataGrid의 DataGridComboBoxColumn에 T의 ObservableCollection을 바인딩하려고합니다.
데이터 그리드의 정의는 다음과 같습니다바인딩 DataGridComboBoxColumn

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Model, IsAsync=True}"> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Column Entry" IsReadOnly="True" Binding="{Binding ColumnName}"/> 
     <DataGridComboBoxColumn Header="Road Type" ItemsSource="{Binding RoadTypes}"/> 
    </DataGrid.Columns> 

</DataGrid> 

이뿐만 아니라 뷰 모델 및 모델

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     var viewModel = new ViewModel(); 
     DataContext = viewModel; 
    } 
} 

public class ViewModel : ViewModelBase 
{ 
    private ObservableCollection<Model> _model; 

    public ViewModel() 
    { 
     var list = new List<Model>(); 
     var roadTypes = new ObservableCollection<RoadType> 
          { 
           new RoadType 
            { 
             Code = 1, 
             Id = 1, 
             Name = "Name1" 
            }, 
           new RoadType 
            { 
             Code = 1, 
             Id = 1, 
             Name = "Name1" 
            } 
          }; 

     Model = new ObservableCollection<Model> 
        { 
         new Model 
          { 
           ColumnName = "Col1", 
           RoadTypes = roadTypes 
          }, 
         new Model 
          { 
           ColumnName = "Col1", 
           RoadTypes = roadTypes 
          } 
        }; 
    } 

    public ObservableCollection<Model> Model 
    { 
     get { return _model; } 
     set 
     { 
      _model = value; 
      RaisePropertyChanged(() => Model); 
     } 
    } 
} 

public class RoadType 
{ 
    public int Id { get; set; } 
    public int Code { get; set; } 

    public string Name { get; set; } 
} 

public class Model : ObservableObject 
{ 
    private ObservableCollection<RoadType> _roadTypes; 
    public string ColumnName { get; set; } 

    public ObservableCollection<RoadType> RoadTypes 
    { 
     get { return _roadTypes; } 
     set 
     { 
      _roadTypes = value; 
      RaisePropertyChanged(() => RoadTypes); 
     } 
    } 
} 

데이터 그리드를 표시 텍스트 열을하지만이 콤보 상자의 값을 표시하지 않습니다.
무엇이 잘못 되었나요?

답변

6

RoadTypes는 간단한 문자열 목록이 아니기 때문에 ComboBox에 표시해야하는 속성을 콤보 상자에 알려야합니다. 당신의 콤보 상자 declartion

DisplayMemberPath="Name" 

를 추가하십시오 -

업데이트 :

좋아,이 WPF의 DataGrids를 알려진 "기능"입니다. 문제는 DataGridComboBox에 DataGrid의 DataContext가 없다는 것입니다.

<DataGridComboBoxColumn DisplayMemberPath="Name"> 
    <DataGridComboBoxColumn.ElementStyle> 
      <Style> 
       <Setter Property="ComboBox.ItemsSource" Value="{Binding Path=RoadTypes}" /> 
      </Style> 
     </DataGridComboBoxColumn.ElementStyle> 
     <DataGridComboBoxColumn.EditingElementStyle> 
       <Style> 
        <Setter Property="ComboBox.ItemsSource" Value="{Binding Path=RoadTypes}" /> 
       </Style> 
     </DataGridComboBoxColumn.EditingElementStyle> 
    </DataGridComboBoxColumn> 

나는 당신이 당신의 다운로드 링크에서 제공하는 코드를 수정 내가 콤보 상자의 드롭 다운을 열 때 콤보 상자의 항목이 표시되었다 : 나는 콤보은 다음과 같이하는 바인딩 수정했습니다.

체크 아웃 더 명확한 설명을 위해이 링크의 일부 :이 사이트의 모든보고 저를 주도 무엇

Excedrin headache #3.5.40128.1: Using combo boxes with the WPF DataGrid

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b4b13a72-47f9-452f-85c6-6c4b5b606df5/

How to bind collection to WPF:DataGridComboBoxColumn

가 출력 창에서 찾고 및 System.Windows.Data 오류 : 2 : targ에 대한 관리 FrameworkElement 또는 FrameworkContentElement를 찾을 수 없습니다. et 요소. 메시지

+0

시도했지만 작동하지 않았습니다. – Unforgiven

관련 문제