2014-12-16 5 views
0
public ObservableCollection<Model.ChildCommand> ChildCommands { get; private set; } 

ChildCommands привязан к Datagrid.ObservableCollection Refresh не работает, когда динамическое выделение

Оба сегмента показывают мне элементы в Datagrid.

Но в сегменте 1 элементы Datagrid не обновляются автоматически при изменении коллекции. С сегментом два обновляется.

Сегмент 1:

var childs = from child in m_context.ChildCommand.Local 
         select child; 


this.ChildCommands = new ObservableCollection<Model.ChildCommand>(childs); 

Сегмент 2:

this.ChildCommands = m_context.ChildCommand.Local; 

Как получить автоматическое обновление с помощью одного сегмента?

+0

Какой пользовательский интерфейс вы используете? WPF или WinForms? – JPVenson

ответ

0

Причина Сегмент 1 не обновляется автоматически, что вы в конечном итоге привязки к другому экземпляру ObservableCollection.

Когда m_context.ChildCommand.Local изменяется, ваш датафайтор сегмента 2 получает уведомление, поскольку он привязан к этому наблюдаемому экземпляру коллекции. Однако ваш файл данных Segment 1 привязан к другому наблюдаемому экземпляру коллекции (который вы сами создаете, когда вы говорите новый ObservableCollection (childs).

Если вы действительно хотите, чтобы оба они были связаны с коллекцией m_context.ChildCommand.Local то вы должны реализовать его как таковой, а не создавать другой наблюдаемый экземпляр коллекции для сегмента 1.

+0

ChildCommands = из child в m_context.ChildCommand.Local select child; // // Это не работает, у вас есть идея, как решить мою проблему? – green1111

0

Вы должны реализовать INotifyPropertyChanged для ChildCommands собственности, например:

public class YourClass: INotifyPropertyChanged 
    { 
     private ObservableCollection<Model.ChildCommand> _childCommands; 

     public event PropertyChangedEventHandler PropertyChanged; 

     public ObservableCollection<Model.ChildCommand> ChildCommands 
     { 
      get { return _childCommands; } 
      set 
      { 
       _childCommands= value; 
       OnPropertyChanged("ChildCommands"); 
      } 
     } 

     protected void OnPropertyChanged(string name) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(name)); 
      } 
     } 
    } 

Смотреть это для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms743695%28v=vs.110%29.aspx

0

мое решение это наследовать свой класс от класса NotificationObject.

После этого, просто использовать

this.ChildCommands = m_context.ChildCommand.Local; 

RaisePropertyChanged(() => this.ChildCommands); //this line notifies the UI that the underlying property has changed. 
0

привязок к коллекции не будет обновляться, если коллекция получает повторно инстанцирован. У вас есть два варианта:

  1. Реализовать INotifyPropertyChanged на имущество ChildCommands
  2. Вместо того, чтобы делать:

    this.ChildCommands = новый ObservableCollection (Чайлдс);

ли это вместо:

this.ChildCommands.Clear(); 

foreach(var child in childs) 
    this.ChildCommands.Add(child); 
Смежные вопросы