Поиск объекта в ListViewRow - PullRequest
       1

Поиск объекта в ListViewRow

0 голосов
/ 24 февраля 2011

Я собрал следующий код, чтобы найти объект в ListView.В настоящее время я использую это для возврата TextBox в ListViewRow, который выбрал пользователь.

private T findObjectInListView<T>(ListView lv, object item, string objectName)
    {
        ListViewItem lvi = (ListViewItem)lv.ItemContainerGenerator.ContainerFromItem(item);

        // Getting the ContentPresenter of myListBoxItem
        ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(lvi);

        // Finding textBlock from the DataTemplate that is set on that ContentPresenter
        DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;

        //Cast to chosen type and return
        return (T)myDataTemplate.FindName(objectName, myContentPresenter);
    }

Это прекрасно работает, когда мой ListView содержит только один DataTemplate, однако, как только я добавляю другой, он завершается неудачей.Я предполагаю, что это потому, что я смотрю, я не ищу ContentPresenter по имени, и, следовательно, только что возвращается первый (который в данном случае не содержит TextBox).

Может кто-нибудь указать мне правонаправление относительно того, как решить это;Правильно ли я считаю, что мне нужно искать ContentPresenter по имени?Я не могу найти ни одной статьи, посвященной этой проблеме, поэтому я полагаю, что вообще могу оказаться на неправильном пути ...

Заранее спасибо.

РЕДАКТИРОВАТЬ: Это xaml Яс помощью.Моя функция работает нормально, когда я удаляю первый GridViewColumn:

<ListView Height="372" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listView1" VerticalAlignment="Top" Width="516" MouseUp="listView1_MouseUp">
            <ListView.Resources>
                <DataTemplate x:Key="Check">
                    <StackPanel Orientation="Horizontal">
                        <CheckBox></CheckBox>
                    </StackPanel>
                </DataTemplate>
                <DataTemplate x:Key="Quantity">
                    <StackPanel Orientation="Horizontal">
                        <TextBox Text="0" Width="30" Name="quantity Foreground="LightGray" />
                    </StackPanel>
                </DataTemplate>
            </ListView.Resources>
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="140" Header="Column1" CellTemplate="{StaticResource Check}" />
                    <GridViewColumn Width="140" Header="Column2" CellTemplate="{StaticResource Quantity}" />
                    <GridViewColumn Width="110" Header="Column3" DisplayMemberBinding="{Binding Name}" />
                </GridView>
            </ListView.View>
        </ListView>

1 Ответ

3 голосов
/ 24 февраля 2011

Я настоятельно рекомендую вам выполнить поиск по данным, привязанным к ListView!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...