Я собрал следующий код, чтобы найти объект в 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>