2015-05-14 3 views
0

Пользователь может выполнить действие, и я добавляю данные в коллекцию, привязанную к DataGrid, и это работает нормально.WPF привязывает данные к datagrid только между действиями пользователя. Как принудительно обновить datagrid?

Но если в коллекции есть многократный процесс, в который добавлено несколько записей, я никогда не вижу, чтобы DataGrid обновлялся до завершения процесса. Что я делаю не так? Я действительно новичок в этом, поэтому я уверен, что проблема проста.

private ObservableCollection<StatusEntry> _collSe = new ObservableCollection<StatusEntry>(); 
    public ObservableCollection<StatusEntry> CollSe 
    { 
     get { return _collSe; } 
     set 
     { 
      _collSe = value; 
      // NotifyPropertyChanged("CollSe"); 
     } 
    } 

    CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "STARTED: Translating file to DataTable" }); 
       DataTable dt = ExcelHelper.ReadAsDataTable(tbFileName.Text); 
       CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "COMPLETE: Translating file to DataTable" }); 

EDIT:

Яснее вот что я пытался .. Еще не обновляется интерфейс до конца, хотя

private void btnProcessFile_Click(object sender, RoutedEventArgs e) 
    { 
     //THis should happen as soon as the button is pressed 
     ThreadStart job = new ThreadStart(() => 
     { 
      for (int i = 0; i < 20; i++) 
      { 
       // The new thread puts UI operations in the dispatching queue 
       Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => 
       { 
        CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "Happy Tools STARTED" }); 
       })); 
      } 
     }); 

     Thread thread = new Thread(job); 
     thread.Start(); 



     //The another minute of processing here..... 
+0

Ну вот как это. Пока сбор не будет обновлен, пользовательский интерфейс не будет его отражать. – Versatile

+0

Это на той же теме? –

+0

Я думаю, что это имеет какое-то отношение к Thread vs. UI thread? Это не просто datagrid .. Это любой графический интерфейс. Ни один из них не обновляется до тех пор, пока управление не будет возвращено пользователю. – punkouter

ответ

0

Я сделал ошибку, задавая вопрос без понимания основы и, следовательно, кодирование по всему месту, не уверенное в том, что я делаю. Поэтому я думаю, что сейчас понял. Статья, которая помогла моему простому разуму понять это здесь.

Главное, чтобы понять, что WPF имеет основной поток и поток пользовательского интерфейса и как перейти от одного к другому, чтобы разрешить доступ к пользовательскому интерфейсу.

http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and-reporting-the-progress-to-the-ui/

Смежные вопросы