После добавления данных в поле и перехода на вкладку или ввода ObservableCollection обновляется.
После добавления данных в поле и щелчка мышью вне поля ObservableCollection не обновляется.
Однако правильное значение остается в поле.
Чего мне не хватает?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid ItemsSource="{Binding People}" AutoGenerateColumns="False" Grid.Row="0" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" />
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" />
<DataGridTemplateColumn Header="Add">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{x:Static local:MainWindowViewModel.AddPerson}" Content="Add" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Button Content="Check Collection" Command="{Binding PrintPeople}" Grid.Row="1"/>
</Grid>
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class MainWindowViewModel : BindableBase
{
public static DelegateCommand AddPerson { get; set; }
public DelegateCommand PrintPeople { get; set; }
public ObservableCollection<Person> People { get; set; } = new ObservableCollection<Person>()
{
new Person() {FirstName = "Jane", LastName = "Doe" },
};
public MainWindowViewModel()
{
AddPerson = new DelegateCommand(ExecuteAddPerson);
PrintPeople = new DelegateCommand(ExecutePrintPeople);
}
private void ExecuteAddPerson()
{
Person person = new Person();
People.Add(person);
}
private void ExecutePrintPeople()
{
foreach (Person person in People)
{
Console.WriteLine(person.FirstName + " " + person.LastName);
}
}
}
Я использовал призму в примере.