Добавление комбинированного списка в сетку данных в Silverlight - PullRequest
0 голосов
/ 26 мая 2010

Я могу добавить Combobox в DataGrid, используя следующее xmal:

 <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 связаны с т.е. при обработке события Combobox SelectionChanged у меня нет возможности узнать, что к какому ряду относится комбобокс. В частности, я не знаю, какой объект в источнике данных DataGrid что комбобокс ссылается на.

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

Ответы [ 3 ]

2 голосов
/ 26 мая 2010

вы могли бы

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

или

B) Используйте DataGridRow.GetRowContainedElement (element) в вашем обработчике 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...
}

Ура, Алекс

1 голос
/ 26 мая 2010

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

private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var item = sender as FrameworkElement;
    if (item== null)
        return;
    var source = item.DataContext;
}
0 голосов
/ 26 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...