Просто попытайтесь найти простой способ передать или поделиться некоторыми данными между главным окном и диалоговым окном.Как получить данные из диалогового окна?
В моем главном окне есть набор переменных, которые я хочу передать в диалоговое окно, чтобы их можно было отредактировать.
Как я сделал это сейчас, я прохожу в списке конструктору диалогового окна:
private void Button_Click(object sender, RoutedEventArgs e)
{
var window = new VariablesWindow(_templateVariables);
window.Owner = this;
window.ShowDialog();
if(window.DialogResult == true)
_templateVariables = new List<Variable>(window.Variables);
}
А потом там, я думаю, мне нужно глубоко скопировать список,
public partial class VariablesWindow : Window
{
public ObservableCollection<Variable> Variables { get; set; }
public VariablesWindow(IEnumerable<Variable> vars)
{
Variables = new ObservableCollection<Variable>(vars);
// ...
Так что, когда они редактируются, они не отражаются обратно в главном окне, пока пользователь не наведет «Сохранить».
Это правильный подход? Если да, есть ли простой способ для глубокого копирования ObservableCollection? Потому что, поскольку он стоит сейчас, я думаю, что мои переменные изменяются, потому что они делают только мелкую копию.
+1 так, чтобы ваш ответ прошел выше моего. Я, по-видимому, смутился :) –
А! 'ICloneable'! Я пытался подумать о том, «как проверить, реализует ли класс конструктор-копию, чтобы я мог написать расширение ...» Это будет хорошо работать. – mpen