2014-02-14 1 views
0

У меня есть datagrid с двумя столбцами: text и combobox. И combobox должен иметь привязку к наблюдаемой коллекции.Datagridcomboboxcolumn bind to ObservableCollection в элементе источника Datagrid

Это псевдокод для источника DataGrid пунктов:

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:

<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> 

Но DataGrid не показывает каких-либо предметов в comboboxcolumn. Пожалуйста, помогите мне связать datagridcombobox с наблюдаемой коллекцией «ListObjectState» в классе «_dataContext».

Спасибо!

+0

Где вы заполняете коллекцию 'SourceObjList' и 'ListObjectState'? –

+0

Я заполняю их один раз в конструкторе окна. –

+0

Можете ли вы сделать одну вещь для инициализации этих коллекций перед вызовом InitializeComponent и посмотреть, работает ли это. –

ответ

0

Реализовать с INotifyPropertyChanged для _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)); 
     } 
    } 

Поскольку первый набор может сделать после Binding, так что это не повлияет на пользовательский интерфейс ..

+0

Не работает ( –

+0

проверить обновленный ответ ... – Sankarann

+0

Это мне не помогает. И я не могу найти проблему –

0

Его трудно понять, не смотря на весь код , У вас есть проблема с привязкой, и было бы проще найти, где проблема использует инструменты отладки XAML, такие как Snoop или WPF Inspector. Вам просто нужно прикрепить запущенное приложение, чтобы увидеть Datacontext.

Вы можете легко найти, действительно ли datacontext действителен или нет. WPF Inspector имеет лучший пользовательский интерфейс, но его склонность к сбою. Нажмите Ctrl + Shift и наведите указатель мыши на свой элемент управления, чтобы увидеть, как он отражается в просмотре Snoop/WPF.

Также вы можете увидеть окно вывода для какой ошибки привязки вы получаете.