0
我已經組裝了以下代碼以便在ListView中查找對象。我目前使用它來返回用戶選擇的ListViewRow上的文本框。在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>
感謝您的回覆Daniel。請原諒我的無知,但可否詳細說明一下?我的文本框添加在xaml中,與綁定的數據無關。 – Jonathan 2011-02-24 13:28:29
@Jon:我想你在文本框中顯示綁定的數據?如果沒有,也許你可以展示你的XAML。 – 2011-02-24 13:29:58
不幸的是,文本框允許用戶輸入我將在以後處理的數量。我用xaml更新了我的原始帖子。再次感謝。 – Jonathan 2011-02-24 13:34:07