Мой код выглядит следующим образом
MainWindow.Xaml
<ListBox Width="400" Margin="10" x:Name="myListBox"
ItemsSource="{Binding Path=GridVal}" SelectedItem="{Binding CurrentItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="Header1" IsExpanded="True">
<StackPanel>
<DataGrid
x:Name="dataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=GridVal}"
Height="250" Width="250" SelectedItem="{Binding CurrentItem}"/>
</StackPanel>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
MainWindow.Xaml
public object CurrentItem
{
get{return _item;}
set{_item=value;}
}
Он отображает список с Expander и Datagrid.
Я хочу получить текущую выбранную строку в datagrid, которую я не могу получить на данный момент. Я получаю элементы Datatemplate вместо Datagrid
2 ответа
Вы использовали неправильное свойство для привязки данных к вашему свойству CurrentItem
. Вместо SelectedIndex
вы должны привязать данные к DataGrid.SelectedItem
свойство:
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False"
ItemsSource="{Binding GridVal}" Height="250" Width="250"
SelectedItem="{Binding CurrentItem}" />
Хотя, как упоминалось в @Default, вы также пытаетесь привязать свойство CurrentItem
к двум различным свойствам элемента управления, поэтому вам нужно будет добавить другое свойство, чтобы это работало должным образом. Кроме того, свойство CurrentItem
должно быть того же типа, что и элементы в коллекции GridVal
.
ОБНОВЛЕНИЕ >>>
Кажется, вам не хватает какой-то информации, поскольку вы также пытаетесь привязать ту же коллекцию к ListBox.ItemsSource
и DataGrid.ItemsSource
, что невозможно. Для всего внутри DataTemplate
автоматически будет установлен DataContext
элемент из вышеупомянутой коллекции, например. каждый элемент данных будет установлен как DataContext
в каждом DataTemplate
при визуализации.
Следовательно, чтобы ваш текущий код работал, ваши элементы данных в этой коллекции также должны иметь свойства CurrentItem
и GridVal
, но я предполагаю, что это не так. У вас также должны быть ошибки в вашем окне вывода в Visual Studio, которые ясно говорят вам, что нет свойства CurrentItem
ни в каком типе объекта в вашей коллекции.
Предлагаю вам прочитать Обзор шаблонов данных < / a> в MSDN, чтобы лучше понять ситуацию.
Вы можете использовать привязку с относительным источником:
{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
Или с указанным ElementName:
{Binding Path=DataContext.PathToProperty, ElementName=myListBox}
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.