Наличие ObservableCollection Запуск обновления - PullRequest
3 голосов
/ 11 апреля 2010

Так что у меня есть что-то вроде

private  ObservableCollection<ViewModel> _internal;

public ObservableCollection<ViewModel> BoundInternal{get;set}; //this is Binded in the Itemssource like ItemSource={Binding BoundInternal}

Теперь в моем коде я делаю что-то вроде

BoundInternal = _internal, однако проблема в том, что BoundInternal не инициирует событие collectionChanged. Я должен использовать метод Add. Поэтому мне интересно, есть ли решение для этого.

Ответы [ 2 ]

4 голосов
/ 11 апреля 2010

Вот как я подозреваю, ваш код должен выглядеть (хотя он не совсем соответствует тому, что вы в данный момент делаете): -

public class YourClassHoldingThisStuff : INotifyProperyChanged
{
  private  ObservableCollection<ViewModel> _internal;

  public ObservableCollection<ViewModel> BoundInternal
  {
    get { return _internal; }
    set
    {
      _internal = value;
      NotifyPropertyChanged("BoundInternal");
    };
  }
  public event PropertyChangedEventHandler PropertyChanged;

  private void NotifyPropertyChanged(string name)
  {
    if (PropertyChanged != null)
      PropertyChanged(this, new ProperytChangedEventArgs(name));
  }
}

В этом случае поле _internal становится источником значения BoundInternal напрямую, и его следует назначать только через BoundInternal (не присваивайте значение непосредственно _internal). Когда это произойдет, все, что в данный момент связано с ним, будет проинформировано об изменении.

Если по какой-то причине вам действительно нужно сохранить _internal как отдельную ссылку из вспомогательного поля BoundInternal, тогда: -

public class YourClassHoldingThisStuff : INotifyProperyChanged
{
  private  ObservableCollection<ViewModel> _internal;
  private  ObservableCollection<ViewModel> _boundInternal;

  public ObservableCollection<ViewModel> BoundInternal
  {
    get { return _boundInternal; }
    set
    {
      _boundInternal = value;
      NotifyPropertyChanged("BoundInternal");
    };
  }
  public event PropertyChangedEventHandler PropertyChanged;

  private void NotifyPropertyChanged(string name)
  {
    if (PropertyChanged != null)
      PropertyChanged(this, new ProperytChangedEventArgs(name));
  }
}

Теперь, в какой-то момент в вашем коде, когда вы выполните BoundInternal = _internal, все, что с ним связано, будет проинформировано об изменении.

2 голосов
/ 11 апреля 2010

Каждый ItemsControl имеет свойство Items, которое имеет метод Refresh(), который вы можете вызвать, что обновит ваш список.

MyList.Items.Refresh()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...