Вам необходимо привязать к типу, который реализует интерфейс INotifyCollectionChanged, чтобы он предоставлял события, которые привязка данных может использовать для мониторинга, когда элементы добавляются или удаляются. Лучший тип для этого в WPF - ObservableCollection <>, в котором есть конструктор, который примет ваш IEnumerable:
ObservableCollection<string> collection = new ObservableCollection<string>(iEnumerableobject);
dataGrid.ItemSource = collection;
collection.Add("Wibble");
Будет корректно обновляться.
Из ваших комментариев к другому ответу похоже, что вам нужно вызвать вызов add из потока пользовательского интерфейса. Не зная вашего кода более подробно, я не знаю, зачем вам это делать, но давайте предположим, что вы получаете данные из службы в фоновом режиме:
private ObservableCollection<string> collection;
public void SetupBindings()
{
collection = new ObservableCollection<string>(iEnumerableobject);
dataGrid.ItemSource = collection;
//off the top of my head, so I may have this line wrong
ThreadPool.Queue(new ThreadWorkerItem(GetDataFromService));
}
public void GetDataFromService(object o)
{
string newValue = _service.GetData();
//if you try a call add here you will throw an exception
//because you are not in the same thread that created the control
//collection.Add(newValue);
//instead you need to invoke on the Ui dispatcher
if(Dispather.CurrentDispatcher.Thread != Thread.CurrentThread)
{
Dispatcher.CurrentDispatcher.Invoke(() => AddValue(newValue));
}
}
public void AddValue(string value)
{
//because this method was called through the dispatcher we can now add the item
collection.Add(value);
}
Как я уже сказал, у меня нет IDE, поэтому он, вероятно, не скомпилируется, но укажет вам правильное направление.
В зависимости от того, какую именно задачу вы выполняете в фоновом режиме, могут быть более эффективные способы сделать это. Мой пример, приведенный выше, было бы намного проще реализовать с помощью backgroundworker , так что вы можете прочитать об этом тоже.