【问题标题】:Silverlight DataGrid's DataTemplate and Explicit UpdateSourceTriggerSilverlight DataGrid 的 DataTemplate 和显式 UpdateSourceTrigger
【发布时间】:2011-08-28 13:01:53
【问题描述】:

我希望 DataGrid 的 DataTemplate 中的文本框在用户单击“确定”按钮时显式更新。我有以下 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 设置为显式。如何访问 TextBox 项目以对其调用 UpdateSource()?

【问题讨论】:

    标签: c# silverlight datagrid binding updatesourcetrigger


    【解决方案1】:

    您可以使用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 中更简单。

    【讨论】:

    • 不错的解决方案,但我想我找到了另一种不继承该 API 的方法。基本上我遍历每一列,然后是 ItemsSource 中每个项目的“GetCellContent”。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2015-01-06
    • 2011-03-05
    • 2010-12-16
    • 2012-08-11
    相关资源
    最近更新 更多