在将数据添加到字段并单击选项卡或输入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);
}
}
}
我在示例中确实使用了棱镜。
将Person
类实现为BindableBase
public class Person : BindableBase
{
private string _firstName;
private string _lastName;
public string FirstName
{
get { return _firstName; }
set { SetProperty(ref _firstName, value); }
}
public string LastName
{
get { return _lastName; }
set { SetProperty(ref _lastName, value); }
}
}