2010-05-26 2 views
0

Я могу добавить выпадающий к DataGrid с помощью следующей xmal:Добавление выпадающий в DataGrid в Silverlight

<local:DataGridTemplateColumn Header="SomeHeader" Width="106" HeaderStyle="{StaticResource headerAlignRightStyle}" CellStyle="{StaticResource cellAlignRightStyle}"> 
        <local:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding SomeProp}" Margin="4"/> 
         </DataTemplate> 
        </local:DataGridTemplateColumn.CellTemplate> 
        <local:DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <ComboBox 
           x:Name="SomeCombo" 
           SelectionChanged="SomeCombo_SelectionChanged" 
           ItemsSource="{Binding SomeList}" 
           DisplayMemberPath="Name" 
           /> 
         </DataTemplate> 
        </local:DataGridTemplateColumn.CellEditingTemplate> 
       </local:DataGridTemplateColumn> 

Однако то, что я не могу понять, это разумный способ, чтобы получить строку, которая была Combox является связан с. то есть при обработке события SelectionChanged combobox я не знаю, что такое , к какой строке принадлежит combobox. В частности, я не знаю, какой объект в источнике данных DataGrid ссылается на поле со списком.

Любая помощь будет высоко оценена.

ответ

2

вы могли

A) Свяжите SelectedItem свойство ComboBox свойству в модели ViewModel/данных, используя два способа связывания, так что вам не придется беспокоиться о SelectionChanged в первую очередь

или

B) Использование DataGridRow.GetRowContainingElement (элемент) в вашем SelectionChanged обработчиком, т.е.

private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var comboBox = sender as ComboBox; 
    if (comboBox == null) 
     return; 
    var row = DataGridRow.GetRowContainingElement(comboBox); 
    // Do something with row... 
} 

Приветствия, Ale х

+0

Спасибо - Я теперь, глядя в MVVM правильно ... – bplus

0

Как я понимаю, когда вы нажимаете на поле со списком, эта строка должна фокусироваться. Это также означает, что datagrid знает выбранный элемент.

Если вы ищете выделенный объект, у вас должен быть доступ к нему с помощью datagridName.SelectedItem. Это вернет выбранный объект.

Пожалуйста, проверьте его и прокомментируйте решение, так как я не могу проверить ответ прямо сейчас.

1

Если вы просто ищете, чтобы получить элемент строки привязанный, вы можете просто прочитать DataContext отправителя:

private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var item = sender as FrameworkElement; 
    if (item== null) 
     return; 
    var source = item.DataContext; 
} 
Смежные вопросы