2015-09-08 3 views
2

У меня есть определение DataGrid следующим образом:WPF DataGrid не обновляется

<DataGrid Grid.Row="0" Grid.Column="0" x:Name="s" MaxHeight="300" 
      ItemsSource="{Binding MsgCollection, IsAsync=False, Mode=OneTime}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="BankId" 
          Header="Bank Nr." 
          Binding="{Binding BankId}" 
          DisplayIndex="0" /> 

     <DataGridTextColumn x:Name="MessageB" 
          Header="Message B" 
          Binding="{Binding MessageB}" 
          DisplayIndex="1" /> 

    </DataGrid.Columns> 
</DataGrid> 

модели представления кода выглядит следующим образом:

public class AwesomeDataViewModel : ViewModelBase 
{ 
    ... 
    public ObservableCollection<Bank> MsgCollection 
    { 
     get 
     { 
      return m_Msgs; 
     } 
     set 
     { 
      m_Msgs = value; 
      OnPropertyChanged("MsgCollection"); 
     } 
    } 

AwesomeRandomMethode(){ 
    ... 
    // bankCollection contains 200 items 
    MsgCollection = new ObservableCollection<Bank>(bankCollection); 
    OnPropertyChanged("MsgCollection"); 
} 
} 

AwesomeRandomMethode() вызывается позже в программе, чтобы добавлять элементы в dataGrid. Я уведомляю об изменении, вызывая OnPropertyChanged, но ничего не происходит.

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

Однако, если я переключаю вкладку, внезапно обновляется datagrid!

Im ищет решение, которое не нарушает принципов MVVM

ответ

2

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

<DataGrid Grid.Row="0" Grid.Column="0" x:Name="s" MaxHeight="300" ItemsSource="{Binding MsgCollection}"> 
</DataGrid> 

Вы также должны просто объявить свой ObservableCollection и добавить или удалить элементы. Таким образом, все будет автоматически обновляться.

+0

Бог Проклятье, я потратил несколько часов, чтобы решить этот глупый "Mode = TwoWay" ТНХ, – RayOldProf

+0

Это случается лучший из нас. –