Как получить все строки в списке просмотра wpf - PullRequest
0 голосов
/ 07 февраля 2010

У меня есть представление списка, которое имеет вид сетки с четырьмя столбцами. ItemsSource для списка - это IList (Of SomeType). Каждая ячейка в сетке содержит флажки, которые отмечены / не отмечены на основе значений в связанном свойстве. Теперь я хочу получить все строки в виде списка / сетки для сохранения или по крайней мере все те флажки, которые отмечены. Я не мог найти подходящий способ сделать это.

Вот как я могу создать свой список.

                <ListView Margin="10, 40, 95, 10" x:Name="ListViewPane">
                    <ListView.View>
                        <GridView x:Name="gridColumns">
                            <GridViewColumn Width="auto" Header="Right" DisplayMemberBinding="{Binding Name}"/>
                            <GridViewColumn Width="auto" Header="Read">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanRead}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="auto" Header="Write">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanWrite}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="auto" Header="Delete">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanDelete}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                        </GridView>
                        </ListView.View>
                </ListView>

Может ли кто-нибудь мне помочь ????

Ответы [ 2 ]

2 голосов
/ 08 февраля 2010

Вы можете перебирать объект Items в ListView , чтобы получить значения:

foreach( var item in this.ListViewPane.Items )
{
    var ofSomeType = item as OfSomeType;
    if( ofSomeType != null )
    {
        string name = ofSomeType.Name;
        bool canDelete = ofSomeType.CanDelete;
        bool canRead = ofSomeType.CanRead;
        bool canWrite = ofSomeType.CanWrite;

        // do stuff with your Of Some Type objects
    }
}
1 голос
/ 08 февраля 2010

Вам нужно установить привязки IsChecked на Mode = TwoWay, например

IsChecked="{Binding CanRead, Mode=TwoWay}"

Затем WPF обновит ваши бизнес-объекты, когда пользователь установит и снимет флажки.

Теперь вы можете просто собирать значения непосредственно из коллекции бизнес-объектов (ItemsSource):

For Each busobj In ListViewPane.ItemsSource
  If busobj.CanDelete Then
    ' whatever
  End If
Next

(простите за любые синтаксические ошибки в VB)

Если вам действительно нужен доступ к элементам управления ListViewItem, которые представляют физические строки в элементе управления пользовательского интерфейса, вы можете получить их с помощью ItemContainerGenerator:

For Each busobj In ListViewPane.ItemsSource
  Dim lvi As ListViewItem = CType(ListViewPane.ItemContainerGenerator.ContainerFromItem(busobj), ListViewItem)
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...