Если у вас есть подобные ограничения в ваших инструментах запросов, может быть лучше создать представление в базе данных, которое объединяет таблицы, а затем запросить представление.
create view A_B as
выберите идентификатор, значение даты из таблицы A, объединение выберите идентификатор, значение даты из таблицы B;
Вообще говоря, людям будет интересен объект CLR, напрямую связанный с ListBoxItem
, а не фактический ListBoxItem
. Например, если у вас есть список сообщений, вы можете использовать существующий шаблон:
<DataTemplate x:Key="postBody" TargetType="{x:Type Post}">
<Grid>
<TextBlock Text="{Binding Path=author}"/>
<Button Click="DeleteButton_Click">Delete</Button>
</Grid>
</DataTemplate>
<ListBox ItemTemplate="{StaticResource postBody}"
ItemSource="{Binding Posts}"/>
и в своем коде, ваш
DataContext
будет равна вашему ] DataTemplate
DataContext
. В этом случае Пост
.
private void DeleteButton_Click(object sender, RoutedEventArgs e){
var post = ((Button)sender).DataContext as Post;
if (post == null)
throw new InvalidOperationException("Invalid DataContext");
Console.WriteLine(post.author);
}
У вас есть несколько возможностей, в зависимости от того, что вам нужно сделать.
Во-первых, главный вопрос: « зачем вам это"? В большинстве случаев нет реальной необходимости использовать ссылку на элемент контейнера (не говоря уже о вашем случае, но вы должны уточнить). Если вы связываете данные со своим списком, это редко встречается.
Во-вторых, вы можете получить элемент из списка, используя myListBox.ItemContainerGenerator.ContainerFromItem ()
, если ваш список имен имеет имя MyListBox
. Из параметра отправителя вы можете получить обратно фактический элемент, который был шаблонизирован, например (где XXX
- это тип данных, привязанных к вашей базе данных):
Container = sender as FrameworkElement;
if(sender != null)
{
MyItem = Container.DataContext as XXX;
MyElement = MyListBox.ItemContainerGenerator.ContainerFromItem(MyItem); // <-- this is your ListboxItem.
}
Вы можете найти пример этого блог . Она использует метод индекса, но метод Item похож.