Silverlight DataGrid的DataTemplate和Explicit UpdateSourceTrigger

时间:2011-05-19 03:14:32

标签: c# silverlight datagrid binding updatesourcetrigger

我希望DataGrid的DataTemplate中的Textbox在用户单击“确定”按钮时显式更新。我有以下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。如何访问TextBox项目以调用它们上的UpdateSource()?

1 个答案:

答案 0 :(得分: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();
}

但是,您可能会发现将此功能移动到ViewModel中更为简单。