Диалог с OK / Отмена поведения в C # / WPF с привязкой данных - PullRequest
2 голосов
/ 17 марта 2009

В моем классе приложений у меня есть коллекция объектов, например: (Коллекция находится в классе 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; }
}

В главном окне приложения имеется привязка ComboBox к коллекции персон:

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

Теперь я хочу создать диалоговое окно, в котором пользователь может добавлять / удалять / редактировать людей с хорошо известным поведением кнопки OK / Отмена. Может ли это быть легко? Одна важная вещь заключается в том, что на элементы в ComboBox не должны влиять изменения, которые пользователь вносит до нажатия OK.

Заранее спасибо!

Редактировать: я думаю, я должен указать, что я не хочу редактировать конкретного человека в диалоге, но весь список людей.

1 Ответ

3 голосов
/ 17 марта 2009

Добавить и удалить достаточно просто, поскольку это произойдет только после нажатия кнопки ОК.

Для редактирования вам доступны дополнительные опции:

  1. Сделайте Person реализуйте IClonable, передайте клонированную копию Person, которую вы редактируете, для привязки к форме редактирования, затем выключите соответствующий Person в вашей коллекции Persons когда вы закончите. Это делает форму редактирования менее сложной и более WPFey.

  2. Не используйте привязку в форме редактирования, просто выполните ручную синхронизацию между элементами управления и Person, переданными по завершении. Наименее WPFey.

  3. Комбинация 1 и 2 - форма редактирования имеет свойства, которые отражают свойства Person и привязаны к ее элементам управления, затем вы синхронизируете Person со свойствами формы, когда закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...