具有数据绑定的C#/WPF中的OK/Cancel行为的对话框

具有数据绑定的C#/WPF中的OK/Cancel行为的对话框,c#,wpf,data-binding,C#,Wpf,Data Binding,在我的应用程序类中,我有一组对象,如下所示: (该集合位于App类中,因为我需要在不同的窗口中访问它的应用程序范围,等等) 现在我想创建一个对话框,用户可以在其中添加/删除/编辑具有众所周知的“确定/取消”按钮行为的人员。这东西容易放下吗?重要的一点是,组合框中的项目不得受用户在按OK之前所做更改的影响 提前谢谢 编辑:我想我应该指出,我不想编辑对话框中的特定人员,但整个人员列表都很简单。添加和删除操作非常简单,因为只有在单击“确定”时才会发生 对于编辑,您可以选择更多选项: 使Person实现

在我的应用程序类中,我有一组对象,如下所示: (该集合位于App类中,因为我需要在不同的窗口中访问它的应用程序范围,等等)

现在我想创建一个对话框,用户可以在其中添加/删除/编辑具有众所周知的“确定/取消”按钮行为的人员。这东西容易放下吗?重要的一点是,
组合框
中的项目不得受用户在按OK之前所做更改的影响

提前谢谢


编辑:我想我应该指出,我不想编辑对话框中的特定人员,但整个人员列表都很简单。

添加和删除操作非常简单,因为只有在单击“确定”时才会发生

对于编辑,您可以选择更多选项:

  • 使
    Person
    实现
    IClonable
    ,传入您正在编辑的
    Person
    的克隆副本以绑定到编辑表单上,然后在编辑完成后切换出
    Persons
    集合中相应的
    Person
    。这使得编辑表单不那么复杂,而且更加WPFey

  • 不要在编辑表单上使用绑定,只需在控件和完成时传入的
    人员之间手动同步即可。至少是一个

  • 1和2的组合-编辑表单具有镜像
    Person
    属性并绑定到其控件的属性,然后在完成时将
    Person
    与表单属性同步

  • public partial class App : Application
    {
        public ObservableCollection<Person> Persons { get; set; }
    
        public App()
        {
            Persons = new ObservableCollection<Person>();
            Persons.Add(new Person() { Name = "Tim", Age = 20 });
            Persons.Add(new Person() { Name = "Sarah", Age = 30 });
        }
    }
    
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    <ComboBox ItemsSource="{Binding Source={x:Static Application.Current}, Path=Persons}" DisplayMemberPath="Name"/>