#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.