none
Как загрузить старый UserControl? RRS feed

  • Вопрос

  • Доброго утра всем. WPF C#.

    Есть Grid Name="GrdOne".

    Загружаю UserControl Name="Usr1" в нём есть TextBox и Combobox

    Usr1 usr = new Usr1;
    
    GrdOne.Children.Add(usr);

    В TextBox ввожу строчку В ComboBox делаю выбор.

    Далее загружаю сюда в грид GrdOne новый Usr2.

    GrdOne.Children.Clear();
    
    Usr2 usrr = new Usr2;
    
    GrdOne.Children.Add(usrr);


    Вопрос?

    Как вернуть первый UserControl с теми данными в TextBox - е которые я вводил, и с тем выбором в ComboBox который я делал. 

    Выгружать данные из TextBox в какой то файл а потом снова их подгружать нет желания. Может как то через оперативную память можно решить?

    13 апреля 2012 г. 2:06

Ответы

  • А если просто объект UserControl-а объявить как поле класса, инициализировать его один раз, а потом добавлять/удалять из коллекции Children, все данные же сохраняться в этом контроле и не нужно будет отдельно в различных полях их сохранять. Правда с точки зрения используемой памяти это будет менее эффективно.


    Для связи [mail]

    • Помечено в качестве ответа developers_s 13 апреля 2012 г. 12:34
    13 апреля 2012 г. 8:27
  • 1. Использовать Visibility, вместо явного удаления

    2. Использовать ViewModel и в ней хранить данные. Этот вариант лучше, но все зависит от задачи.

    • Помечено в качестве ответа developers_s 13 апреля 2012 г. 12:36
    13 апреля 2012 г. 9:00
    Отвечающий

Все ответы

  • Добавь в форму члены, которые будут хранить введенное/выбранное значение. Перед Clear'ом сохрани в них, после загрузки Usr2 установи в нем то что нужно. Вот пример для TextBox'а

        public partial class MainWindow : Window
        {
            private string tmptext;
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void ShowFirst()
            {
                TextBox tb = new TextBox();
                tb.Name = "tb";
                tb.Text = "Текст на первом текстоксе";
                GridOne.Children.Add(tb);
            }
    
            private void ShowSecond()
            {
                tmptext = (GridOne.Children[0] as TextBox).Text;
                GridOne.Children.Clear();
                TextBox tb1 = new TextBox();
                tb1.Name = "tb1";
                tb1.Text = String.Format("Было: {0}", tmptext);
                GridOne.Children.Add(tb1);
            }
        }

    13 апреля 2012 г. 4:25
    Модератор
  • А если просто объект UserControl-а объявить как поле класса, инициализировать его один раз, а потом добавлять/удалять из коллекции Children, все данные же сохраняться в этом контроле и не нужно будет отдельно в различных полях их сохранять. Правда с точки зрения используемой памяти это будет менее эффективно.


    Для связи [mail]

    • Помечено в качестве ответа developers_s 13 апреля 2012 г. 12:34
    13 апреля 2012 г. 8:27
  • 1. Использовать Visibility, вместо явного удаления

    2. Использовать ViewModel и в ней хранить данные. Этот вариант лучше, но все зависит от задачи.

    • Помечено в качестве ответа developers_s 13 апреля 2012 г. 12:36
    13 апреля 2012 г. 9:00
    Отвечающий
  • Хороший вариант. Но это то что я писал. Сохранять где то пусть в переменных, а потом снова подгружать не пойдёт. Это уже реализовано. Искал другой вариант.
    13 апреля 2012 г. 12:33
  • Буду копать тему. Хотя не знаю как но буду копать.
    13 апреля 2012 г. 12:34
  • Думал тоже про visible. Наверное так и сделаю это самый видимо простой вариант. Про ViewModel наверное реальная тема, но не знаю я что это такое. :)
    13 апреля 2012 г. 12:35