ObservableCollection不从DataGrid更新

问题描述 投票:0回答:1

在将数据添加到字段并单击选项卡或输入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);
        }
    }
}

我在示例中确实使用了棱镜。

c# wpf prism
1个回答
0
投票

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); }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.