Здравствуйте. Есть список ListView. Нужно было сделать так, чтобы при клике по элементу в списке открывалось всплывающее окно с контролами для редактирования этого элемента. Воспользовавшись постом notacat
Как видно из картинки, всплывающее окно получилось довольно массивным в плане количества контролов внутри него. Проблема в том, что это всплывающее окно создается для каждого элемента в списке, что приводит к ощутимым тормозам при создании списка, который формируется динамически.
Как можно сделать так чтобы использовалось одно и то же всплывающее окно для разных элементов списка?
Re: [WPF] Как назначит один Popup на все элементы в ListView
От:
Аноним
Дата:
23.12.10 10:59
Оценка:
Обычно вставляют большое меню (или небольшое)если оно разделяемое
в ресурсы, в какие решать тебе (окна, данного элемента, или глобальные)
В элементе ссылаешься на ресурс, конструкция {StaticResource ... }
Дальше сам
Re[2]: [WPF] Как назначит один Popup на все элементы в ListV
Здравствуйте, Аноним, Вы писали:
А>Обычно вставляют большое меню (или небольшое)если оно разделяемое А>в ресурсы, в какие решать тебе (окна, данного элемента, или глобальные) А>В элементе ссылаешься на ресурс, конструкция {StaticResource ... } А>Дальше сам
Не очень понятно какое меню куда вставлять... В данном случае popup является частью шаблона combobox. То есть попап отображается в случае когда юзер кликает левой кнопкой мышки по соответствующему контролу в списке (крестик на рисунке).
Подозреваю что вы имели в виду ContextMenu, который действительно можно просто засунуть в ресурсы и сослаться на него где нужно. Вопрос в том, как это сделать с попапом...
Re: [WPF] Как назначит один Popup на все элементы в ListView
Здравствуйте, danilanv, Вы писали:
D>Здравствуйте. Есть список ListView. Нужно было сделать так, чтобы при клике по элементу в списке открывалось всплывающее окно с контролами для редактирования этого элемента. Воспользовавшись постом notacat
Пока не поздно, возьмите DataGrid — его создали специально для вас. У него есть замечательное свойство RowDetailsTemplate, куда можно впихнуть все эти контролы и не извращаться над ComboBox-ом.
D>Как видно из картинки, всплывающее окно получилось довольно массивным в плане количества контролов внутри него. Проблема в том, что это всплывающее окно создается для каждого элемента в списке, что приводит к ощутимым тормозам при создании списка, который формируется динамически.
Тормоза обычно в биндингах и работе, которая производится в UI-потоке. Создать кучу контролов не проблема, если этому никто не мешает. Выполняйте всю работу по созданию списков в отдельных потоках.
Вот два варианта, как сделать работу, не загружая UI-поток (пишу по памяти, могу ошибаться в порядке параметров).
Пусть был код в каком-нибудь обработчике события, тормозящий всё и нагло ворующий время UI-потока:
var result = InfiniteLoop();
myControl.Content = result;
Переделаем его:
1) Пул потоков, .NET 3.5 SP1
ThreadPool.QueueUserWorkItem(delegate
{
var result = InfiniteLoop();
myControl.Dispatcher.BeginInvoke(delegate
{
myControl.Content = result;
},
DispatcherOperation.Background);
});