WPF数据网格行编辑开始事件以添加新行



我有一个3列的数据网格,它绑定到一个具有3个属性的类的集合。我想在开始编辑一行时添加新行。目前WPF的默认行为是:键入整行,然后单击enter或失去焦点以添加新行。我想在当前行编辑开始时添加行。

似乎没有任何行编辑开始事件。我可以锁定并以编程方式添加空Person,即新行。

有没有一种不那么俗气和优雅的方法来做这件事呢?

  <DataGrid ItemsSource="{Binding Team}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                <DataGridTextColumn Header="Number" Binding="{Binding Number}" />
                <DataGridTextColumn Header="Gender" Binding="{Binding Gender}"/>
            </DataGrid.Columns>
        </DataGrid>

VIEW MODEL:

public class WindowViewModel2:INotifyPropertyChanged
    {
        private ObservableCollection<Person> team;
        public ObservableCollection<Person> Team
        {
            get { return team; }
            set
            {
                team = value;
                OnPropertyChanged();
            }
        }
        public WindowViewModel2()
        {
            team=new ObservableCollection<Person>();
            Team.Add(new Person(){Name="P" ,Gender="M",Number="123"});
        }
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            var handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
        public event PropertyChangedEventHandler PropertyChanged;

    }

类:公共类Person:INotifyPropertyChanged{

    public string Name { get; set; }
    public string Number { get; set; }
    public string Gender { get; set; }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

你可以使用。net 4.5中添加到DataGrid的AddingNewItem事件,它会在新项目被添加到DataGrid之前发生。

如果。net 4.5不是一个选项,我会关闭CanUserAddRows,然后创建一个按钮,直接添加一个新项目到你的集合绑定ItemsSource,在这个按钮中你可以做任何初始化或计算,然后用户可以编辑DataGrid中的其余部分。这是我经常用于删除的技术,而不是使用内置的CanUserDeleteRows。

最新更新