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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В ListView есть checkbox'ы, Как запретить множественный выбор? 
:(
    Опции темы
ДобренькийПапаша
Дата 4.7.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Есть вот такой ListView. В каждой строке в первом столбце есть checkBox и textblock. Как сделать так, чтобы из всех строк только один чекбокс мог бы быть помеченным? К чему бы такому привязать? Или придётся всё-таки делать недекларативно?
Код

<ListView Name="lvTariffs"
                      Grid.Row="1"
                      Style="{StaticResource FAcceptedMoneyListView}"
                      ItemsSource="{Binding TariffsList }">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn Width="120" Header="Дата создания">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <CheckBox VerticalAlignment="Center" Margin="0,0,3,0"></CheckBox>
                                            <TextBlock Text="{Binding Path=CreationDate}"></TextBlock>
                                        </StackPanel>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="260" Header="Дорога" DisplayMemberBinding="{Binding Path=RailName}"/>
                            <GridViewColumn Width="260" Header="Направление" DisplayMemberBinding="{Binding Path=ServerName}"/>
                            <GridViewColumn Width="320" Header="Имя файла" DisplayMemberBinding="{Binding Path=Name}"/>
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>



--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Rohoss
Дата 4.7.2011, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



Наверное, если ты хочешь только декоративно, то так не получится. однако, такой кейс легко реализуется через MVVM. 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
ДобренькийПапаша
Дата 4.7.2011, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Цитата(Rohoss @  4.7.2011,  15:45 Найти цитируемый пост)
Наверное, если ты хочешь только декоративно, то так не получится. однако, такой кейс легко реализуется через MVVM.


Хорошо, согласен на код. Подскажи как реализовать smile
С MVVM пока не дружу, но это пока (очень надеюсь в течение пары месяцев разобраться smile )

Это сообщение отредактировал(а) ДобренькийПапаша - 4.7.2011, 15:52


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
ДобренькийПапаша
Дата 6.7.2011, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Ну так что, кто подскажет как покрасивше организовать код, отлавливающей проставку галок?)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Rohoss
Дата 6.7.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



Цитата(ДобренькийПапаша @  6.7.2011,  08:04 Найти цитируемый пост)
Ну так что, кто подскажет как покрасивше организовать код, отлавливающей проставку галок?))) 

Я бы привёл, но сейчас просто вгору некогда даже глянуть. Изучай MVVM и решение само собой придёт  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
ДобренькийПапаша
Дата 12.7.2011, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Цитата(Rohoss @  4.7.2011,  15:45 Найти цитируемый пост)
Наверное, если ты хочешь только декоративно, то так не получится. однако, такой кейс легко реализуется через MVVM.  

Спросил на MSDN. Оказывается это решается так:
Код

<ListView x:Name="lv" SelectionMode="Single">
      <ListView.View>
        <GridView>
          <GridView.Columns>
            <GridViewColumn>
              <GridViewColumn.CellTemplate>
                <DataTemplate>
                  <CheckBox IsChecked="{Binding IsSelected,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ListViewItem}}}" />
                </DataTemplate>
              </GridViewColumn.CellTemplate>
            </GridViewColumn>
          </GridView.Columns>
        </GridView>
      </ListView.View>
    </ListView>

Вот только понять бы теперь механизм того как это работает smile То, что указана относительная привязка и указанием типа предка понятно. Но как так получается, что одна галка ставится, а прошлая снимается - непонятно. При этом всё работает даже если щёлкать тупо на строке в ListView, совершенно необязательно тыкать на checkbox. То есть, работает всё идеально. Но вот как оно работает? smile

Это сообщение отредактировал(а) ДобренькийПапаша - 12.7.2011, 07:50


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Kefir
Дата 12.7.2011, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



ДобренькийПапаша, в ListView есть такая штука, что при условии что SelectionMode="Single" только один элемент может быть выбран одновременно. Внутри ListView сидят элементы ListViewItem у которых есть св-во IsSelected. Когда ты клацаешь мышкой на один из ListViewItem его св-во IsSelected ставится в true (а поскольку только один элемент может быть выбран, то у всех других ListViewItem теперь IsSelected=false). А поскольку твой чекбокс привязан в этому самому свойству IsSelected, то чекбокс будет точно также менять свои значения в зависимости от того у какого ListViewItem IsSelected == true.

(надеюсь не очень запутанно объяснил smile)
PM MAIL WWW Skype   Вверх
ДобренькийПапаша
Дата 12.7.2011, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Ах, вот что за IsSelected. Ясно. Спасибо smile


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


 




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


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

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