Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf datagrid行编辑开始事件以添加新行_C#_Wpf_Datagrid - Fatal编程技术网

C# wpf datagrid行编辑开始事件以添加新行

C# wpf datagrid行编辑开始事件以添加新行,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个包含3列的数据网格,它绑定到一个包含3个属性的类集合。 我想添加新行,因为行将开始编辑。现在默认的WPF行为是:键入整行,然后单击enter或lose focus添加新行。我希望在当前行编辑开始时添加行 似乎没有任何行编辑开始事件。我可以锁定并以编程方式添加空的人,即新行 是否有一个不那么粗俗和优雅的wya来做这件事 <DataGrid ItemsSource="{Binding Team}"> <DataGrid.Columns>

我有一个包含3列的数据网格,它绑定到一个包含3个属性的类集合。 我想添加新行,因为行将开始编辑。现在默认的WPF行为是:键入整行,然后单击enter或lose focus添加新行。我希望在当前行编辑开始时添加行

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

是否有一个不那么粗俗和优雅的wya来做这件事

  <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>

您可以使用.NET 4.5中添加到DataGrid的AddingNewItem事件,该事件发生在将新项添加到DataGrid之前

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

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;



    }
    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;
}