c# - 使用数据绑定(bind)的 C#/WPF 中具有确定/取消行为的对话框

标签 c# wpf data-binding

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

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

在应用程序的主窗口上,有一个与 Persons 集合绑定(bind)的 ComboBox:

<ComboBox ItemsSource="{Binding Source={x:Static Application.Current}, Path=Persons}" DisplayMemberPath="Name"/>

现在我想创建一个对话框,用户可以在其中使用众所周知的“确定”/“取消”按钮行为添加/删除/编辑人员。这能轻易倒下吗?一件重要的事情是,ComboBox 中的项目不得受到用户在按“确定”之前所做的更改的影响。

提前致谢!

编辑:我想我应该指出,我不想编辑对话框中的特定人员,而是编辑整个人员列表。

最佳答案

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

对于编辑,您有更多选择:

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

  2. 不要在编辑表单上使用绑定(bind),只需在完成后传入的控件和 Person 之间进行手动同步即可。最少 WPFey。

  3. 1 和 2 的组合 - 编辑表单具有镜像 Person 属性的属性并绑定(bind)到其控件,然后同步 Person完成后使用表单的属性。

关于c# - 使用数据绑定(bind)的 C#/WPF 中具有确定/取消行为的对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654552/

相关文章:

c# - TextBox.Text += "string";与 TextBox.AppendText ("string");

c# - 为什么 linq 扩展方法返回具体类型

c# - Linq2Sql 包含

c# - 禁用 wpf 组合框的项目(如果存在于 mysql 数据库中)

c# - 是否有任何理由仅将 string.Format() 与字符串参数一起使用?

c# - 如何使这段代码更有效率?

c# - 从 Font 获取 "ascent"LineHeight

c# - 疯狂使用 ComboBox SelectedItem

c# - 如何正确地将集合数据绑定(bind)到TabControl?

WPF 对象将自身发送为 MultiBinding 路径