2014-02-14 3 views
0

두 개의 열, 즉 텍스트와 콤보 박스가있는 DataGrid가 있습니다. 그리고 콤보 박스는 관찰 가능한 수집에 바인딩해야합니다. 데이터 그리드에 대한Datagridcomboboxcolumn은 Datagrid 소스의 항목에서 ObservableCollection에 바인딩합니다.

public class ModeObjectState 
    { 
     public int ID { get; set; } 
     public int ObjectTypeID { get; set; } 
     public string State { get; set; } 
    } 

    public class ModeObject 
    { 
     public string Name { get; set; } 
     public int objID { get; set; } 
     public int Type { get; set; } 
     public int StateID { get; set; } 
     public bool Format { get; set; } 
    } 

    public class _dataContext 
    { 
     public ObservableCollection<ModeObjectState> ListObjectState { get; set; } 
     public ModeObject ModeObj { get; set; } 
    } 

    ObservableCollection<_dataContext> SourceObjList 
    objTable.ItemsSource = SourceObjList; 

이것은 XAML 코드 :

<DataGrid x:Name="objTable" AutoGenerateColumns="False" > 
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="ColumnName" Binding="{Binding Path=ModeObj.Name}" IsReadOnly="True" /> 
      <DataGridComboBoxColumn x:Name="ColumnState" ItemsSource="{Binding ListObjectState}" DisplayMemberPath="State" SelectedValuePath="ID" SelectedValueBinding="{Binding Path=ModeObj.StateID}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

하지만 데이터 그리드는 comboboxcolumn에있는 모든 항목을 표시하지 않습니다

이 데이터 그리드 항목 소스에 대한 의사입니다. 제발, "_dataContext"클래스의 관찰 가능한 컬렉션 "ListObjectState"에 datagridcombobox 바인딩을 도와주세요.

감사합니다.

+0

컬렉션'SourceObjList' 및 'ListObjectState'는 어디에 채우고 있습니까? –

+0

윈도우의 생성자에서 한 번 채 웁니다. –

+0

'InitializeComponent' 호출 전에 그 콜렉션을 초기화하고 그 것이 작동하는지 확인할 수 있습니까? –

답변

0

는 1 세트가 Binding 후에 수행 할 수 있기 때문에 _dataContext

public class _dataContext : INotifyPropertyChanged 
    { 
     private ObservableCollection<ModeObjectState> _listObjectState; 

     public ObservableCollection<ModeObjectState> ListObjectState 
     { 
      get { return _listObjectState; } 
      set 
      { 
       _listObjectState = value; 
       OnPropertyChagned("ListObjectState"); 
      } 
     } 

     public ModeObject ModeObj { get; set; } 

     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnPropertyChagned(string propertyName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

에 대한 INotifyPropertyChanged으로 구현, 그래서 늘 있습니다 .. UI에 영향을

+0

작동하지 않습니다 ( –

+0

업데이트 된 답변 확인 ... – Sankarann

+0

도움이되지 않습니다. 문제를 찾을 수 없습니다. –

0

그것의 전체 코드를 보지 않고 파악하기 어려운 . 바인딩 문제가 있으며 Snoop 또는 WPF Inspector과 같은 XAML 디버깅 도구를 사용하여 문제가 어디에 있는지 쉽게 찾을 수 있습니다. Datacontext를 보려면 실행중인 응용 프로그램을 연결하기 만하면됩니다.

datacontext가 유효한지 쉽게 확인할 수 있습니다. WPF Inspector는 더 나은 사용자 인터페이스를 가지고 있지만 충돌하기 쉽습니다. Ctrl + Shift를 누른 상태에서 컨트롤 위에 마우스를 가져 가면 Snoop/WPF Inspect에 반영됩니다.

출력 창에서 바인딩 오류가 무엇인지 확인하십시오.