2015-03-03 3 views
0

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

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;} 
    } 

Он отображает Listbox, который имеет Expander и Datagrid

Я хочу, чтобы получить текущую выбранную строку в DataGrid, который я не могу получить в этом point.I я получаю DataTemplate элементы вместо Datagrid

+0

использованиеизменение свойств или onpropertychange RaiseonPropertyChange ("CurrentItem"); @kyle –

+1

кажется, что вы привязываетесь к 'CurrentItem' как для списка, так и для' DataGrid'. Вы уверены, что проверяете правильный «CurrentItem»? Он должен быть в классе, который также имеет свойство 'GridVal' – Default

+1

Вы видите какие-либо ошибки привязки в отладочном выходе? Можете ли вы показать свои модели просмотра, которые вы используете в качестве datacontexts? – Default

ответ

1

Вы использовали неправильное свойство для привязки данных к вашей CurrentItem собственности. Вместо SelectedIndex, вы должны данные связываются с DataGrid.SelectedItem property:

<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" 
    ItemsSource="{Binding GridVal}" Height="250" Width="250" 
    SelectedItem="{Binding CurrentItem}" /> 

Хотя, как уже упоминалось @default, вы также пытаетесь связать данные CurrentItem свойства двух различных свойств элементов управления, так что вам нужно добавить для того, чтобы это нормально работало. Кроме того, свойство CurrentItem должно быть того же типа, что и элементы коллекции GridVal.


UPDATE >>>

Вы, кажется, не хватает какой-то информации, как вы также пытаются связать данные и ту же коллекцию в ListBox.ItemsSource и DataGrid.ItemsSource, которое не возможно. Все внутри DataTemplate автоматически установит свой DataContext в элемент из вышеупомянутой коллекции, например. каждый элемент данных будет установлен как DataContext в каждом DataTemplate при его визуализации.

Следовательно, для того, чтобы ваш текущий код работал, ваши элементы данных в этой коллекции также должны обладать CurrentItem и GridVal свойствами, но я предполагаю, что они этого не делают. У вас также должны быть ошибки в окне вывода в Visual Studio, которые ясно говорят вам, что нет никакого свойства CurrentItem в любом типе объекта в вашей коллекции.

Предлагаю вам прочитать на странице MSDN Data Templating Overview‎, чтобы помочь вам лучше понять ситуацию.

+0

Хотя второй 'CurrentItem' включен в' DataTemplate', так что по крайней мере они не привязаны к одному и тому же 'DataContext' (если только это не было изменено где-то вне примера кода). Однако его объяснение, похоже, указывает на то, что он проверяет свойство «parent», а не дочернее свойство. – Default

+0

@Default, согласился. – Sheridan

+0

@Sheridan Не могли бы вы объяснить на примере – Rohit

0

Вы можете использовать связывание с Relative source:

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

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

{Binding Path=DataContext.PathToProperty, ElementName=myListBox} 
Смежные вопросы