Табличка данных Silverlight DataGrid и явный UpdateSourceTrigger

#c# #silverlight #datagrid #binding #updatesourcetrigger

#c# #silverlight #datagrid #привязка #updatesourcetrigger

Вопрос:

Я хочу, чтобы текстовое поле в табличке данных DataGrid явно обновлялось, когда пользователь нажимает кнопку OK. У меня есть следующий XAML-код:

 <sdk:DataGrid ...>
  <sdk:DataGridTemplateColumn Header="Series Name" Width="200" IsReadOnly="False">
     <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate x:Name="labelData">
           <TextBox Text="{Binding Label, Mode=TwoWay, UpdateSourceTrigger=Explicit}" x:Name="colorPicker"/>
        </DataTemplate>
     </sdk:DataGridTemplateColumn.CellTemplate>
   </sdk:DataGridTemplateColumn>
</sdk::DataGrid>
  

Я установил для UpdateSourceTrigger значение Explicit . Как мне получить доступ к элементам текстового поля, чтобы вызвать для них UpdateSource ()?

Ответ №1:

Вы могли бы использовать Linq-to-VisualTree, это позволяет запрашивать визуальное дерево для поиска элементов, соответствующих определенным критериям. Если вы назовете свой DataGrid , x:Name="myGrid" , должно сработать следующее:

 var textBoxes = myGrid.Descendants<TextBox>().Cast<TextBox>();
foreach(var textbox in textBoxes)
{
    BindingExpression be = textbox.GetBindingExpression(TextBox.TextProperty);
    be.UpdateSource();
}
  

Однако, возможно, вам будет проще перенести эту функциональность в ViewModel.

Комментарии:

1. Хорошее решение, но я думаю, что нашел другой способ сделать это без наследования этого API. В основном я перебираю каждый столбец, а затем «получаю Cellcontent» каждого элемента в ItemsSource.