Мой код выглядит следующим образом

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

0
Rohit 3 Мар 2015 в 16:33

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, чтобы лучше понять ситуацию.

1
Sheridan 3 Мар 2015 в 14:13

Вы можете использовать привязку с относительным источником:

{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

Или с указанным ElementName:

{Binding Path=DataContext.PathToProperty, ElementName=myListBox}
0
Community 23 Май 2017 в 12:06