Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление визуального элемента в listView. в обход ItemsSource 
:(
    Опции темы
hexzo
Дата 24.8.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Мне нужно быстренько, на небольшой промежуток времени в ListView добавить нетиповой элемент, а потом убрать его оттуда.
panelA.Items.Add(new TextBox());

А мне в ответ, что как бы нельзя, используй вместо этого ItemsSource.
Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead.

Цель такова.
1) Список отображает содержимое файловой системы.
2) Когда нужно создать директорию, я добавляю в список textbox куда вводится имя файла.
3) А когда вся нужная от него информация получена, убирается оттуда.

Как это осуществить с наименьшим гемороем?
PM MAIL   Вверх
Gvozdin
Дата 24.8.2011, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



в стиле MVVM или MVP попробуйте
представьте директорию своим классом
и если директория будет новой(добавить её в ItemsSource вместе с настоящими директриями), то для неё отдельный шаблон с текст боксом c возможностью ввода названия
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
hexzo
Дата 24.8.2011, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Gvozdin
Цитата

представьте директорию своим классом

Примерно так и есть.

Цитата

и если директория будет новой(добавить её в ItemsSource вместе с настоящими директриями), то для неё отдельный шаблон с текст боксом c возможностью ввода названия

Как вариант я могу в классе для файла завести флажок в зависимости от которого триггер данных в стиле для элемента будет включать соответствующий шаблон.

Но я не въехал в один момент. Куда мне пихать шаблон?

Я могу указать шаблон для элемента в свойстве ItemTemplate класса ListView.
Код

  <ListView Height="209" HorizontalAlignment="Left" Margin="62,44,0,0" Name="listView1" VerticalAlignment="Top" Width="102">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Path=Text}"></TextBox>
                </DataTemplate>
            </ListView.ItemTemplate>
                                      
            <TextBlock>1</TextBlock>
            <TextBlock>2</TextBlock>
            <TextBlock>3</TextBlock>
        </ListView>


Но если у меня использовано свойство View в котором у меня определены колонки, то свойство ItemTemplate работать перестаёт.

Код

  <ListView Height="209" HorizontalAlignment="Left" Margin="62,44,0,0" Name="listView1" VerticalAlignment="Top" Width="102">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Path=Text}"></TextBox>
                </DataTemplate>
            </ListView.ItemTemplate>
            
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="name"> </GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
                            
            <TextBlock>1</TextBlock>
            <TextBlock>2</TextBlock>
            <TextBlock>3</TextBlock>
        </ListView>


В классе  GridView я вижу свойство GridViewItemContainerStyleKey. Но оно почему то статическое. А в документации в его описании даже нет примера использования. И что с ним делать?

 smile 

Это сообщение отредактировал(а) hexzo - 24.8.2011, 19:06
PM MAIL   Вверх
hexzo
Дата 25.8.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Надо шаблон пихать в CellTemplate.
Цитата

<ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="name">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox Text="{Binding Path=Text}"></TextBox>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>

PM MAIL   Вверх
hexzo
Дата 25.8.2011, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Блин, а где свойство для стиля?  smile 
PM MAIL   Вверх
Gvozdin
Дата 25.8.2011, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



Если вы делаете флаг IsNew у директории, то вам надо сделать в DataTemplate тригер который отобразит TextBox(скроет TextBlock).

--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
hexzo
Дата 25.8.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Gvozdin
Цитата

Если вы делаете флаг IsNew у директории, то вам надо сделать в DataTemplate тригер который отобразит TextBox(скроет TextBlock).

Тока триггер же должен быть в стиле, а свойства для стиля там нет. Но зато есть свойство CellTemplateSelector.

У меня просто слов на это wpf не хватает.  smile 

Это сообщение отредактировал(а) hexzo - 25.8.2011, 10:30
PM MAIL   Вверх
Gvozdin
Дата 25.8.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



Да вот так сделайте, какой стиль?

Код

        <DataTemplate>
            <Grid>
                <TextBlock x:Name="block"/>
                <TextBox x:Name="box" Visibility="Collapsed"/>
            </Grid>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsNew}" Value="True">
                    <Setter TargetName="block" Property="Visibility" Value="Collapsed"/>
                    <Setter TargetName="box" Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>


И вообще хочу сказать что ListView был актуален когда не было DataGrid, сейчас же для гридов лучше использовать DataGrid. Очень хороший контрол, проблем с ним почти нет.

Это сообщение отредактировал(а) Gvozdin - 25.8.2011, 10:38
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
hexzo
Дата 25.8.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Gvozdin
Цитата

Да вот так сделайте, какой стиль?

А я так сам шаблон не переопределю. Наверное. smile А в стиле я могу разные шаблоны подставлять. 

Спасибо за помощь.

В итоге я решил, что лучше воспользоваться GreedViewColumn.CellTemplateSelector.
PM MAIL   Вверх
Gvozdin
Дата 25.8.2011, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



Тоже вариант, но минус этого в том, что нельзя будет как в тригере по изменению свойства поменять сразу шаблон
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.