C# Silverlight数据网格&x27;s数据模板和显式UpdateSourceTrigger

C# Silverlight数据网格&x27;s数据模板和显式UpdateSourceTrigger,c#,silverlight,datagrid,binding,updatesourcetrigger,C#,Silverlight,Datagrid,Binding,Updatesourcetrigger,我希望DataGrid的DataTemplate中的文本框在用户单击OK按钮时显式更新。我有以下XAML代码: <sdk:DataGrid ...> <sdk:DataGridTemplateColumn Header="Series Name" Width="200" IsReadOnly="False"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate x:

我希望DataGrid的DataTemplate中的文本框在用户单击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()?

您可以使用,这允许您查询可视化树以查找符合特定条件的元素。如果您将自己的
DataGrid
x:name=“myGrid”
命名为,则以下操作应该有效:

var textBoxes = myGrid.Descendants<TextBox>().Cast<TextBox>();
foreach(var textbox in textBoxes)
{
    BindingExpression be = textbox.GetBindingExpression(TextBox.TextProperty);
    be.UpdateSource();
}
var textboxs=myGrid.subjects().Cast();
foreach(文本框中的var textbox)
{
BindingExpression be=textbox.GetBindingExpression(textbox.TextProperty);
be.UpdateSource();
}

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

这是一个不错的解决方案,但我认为我找到了另一种方法,可以在不继承该API的情况下实现此功能。基本上,我遍历每一列,然后遍历ItemsSource中每一项的“GetCellContent”。