2011-05-19 58 views
1

我希望DataGrid的DataTemplate中的文本框在用户单击确定按钮时显式更新。我有以下XAML代码:Silverlight DataGrid的DataTemplate和Explicit UpdateSourceTrigger

<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。如何访问TextBox项目以在其上调用UpdateSource()?

回答

2

您可以使用Linq-to-VisualTree,这允许您查询可视化树以查找符合特定条件的元素。如果你的名字你DataGridx:Name="myGrid",下面应该工作:

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

然而,你可能会发现它简单到这个功能移动到视图模型。

+0

不错的解决方案,但我想我找到了另一种方式来做到这一点,而无需继承该API。基本上我遍历每个列,然后在ItemsSource中的每个项目的“GetCellContent”。 – Dan 2011-05-19 18:46:31