【问题标题】:Set Binding for DataTemplate's elements programmatically以编程方式为 DataTemplate 的元素设置绑定
【发布时间】:2015-06-04 15:36:21
【问题描述】:

我有这样的模板

<Window.Resources>
    <DataTemplate x:Key="MemberCoefDataTemplate">
        <StackPanel>
            <CheckBox Name="CheckBox"></CheckBox>
            <TextBox Name="TextBox"></TextBox>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

我在网格中使用它

<DataGridTemplateColumn CellTemplate="{StaticResource MemberCoefDataTemplate}" />

我需要动态地将列添加到网格中。作为绑定,我使用索引器属性。所以我需要动态设置绑定,因为我不知道绑定到哪个索引。当我只是为了测试尝试过这个

var column = new DataGridTemplateColumn();
column.CellTemplate = (DataTemplate)Application.Current.MainWindow.Resources["MemberCoefDataTemplate"];
TextBox tb = column.CellTemplate.FindName("TextBox", dg) as TextBox;

我得到了 InvalidOperationException 和描述:

此操作仅对应用了此模板的元素有效

【问题讨论】:

    标签: wpf binding datatemplate code-behind


    【解决方案1】:

    通常要在设置期间获得控制权,您必须调用方法LoadContent();

    因此我会尝试column.CellTemplate.LoadContent()

    【讨论】:

      【解决方案2】:

      您可以在 Josh Smith here 他的博客上找到关于您的问题的完整解释(当然还有解决方案)。

      这确实是DataGridTemplateColumn 应用DataTemplate 的地方:

      private FrameworkElement LoadTemplateContent(bool isEditing, object dataItem, DataGridCell cell)
      {
          DataTemplate dataTemplate;
          DataTemplateSelector dataTemplateSelector;
          this.ChooseCellTemplateAndSelector(isEditing, out dataTemplate, out dataTemplateSelector);
          if (dataTemplate != null || dataTemplateSelector != null)
          {
              ContentPresenter contentPresenter = new ContentPresenter();
              BindingOperations.SetBinding(contentPresenter, ContentPresenter.ContentProperty, new Binding());
              contentPresenter.ContentTemplate = dataTemplate;
              contentPresenter.ContentTemplateSelector = dataTemplateSelector;
              return contentPresenter;
          }
          return null;
      }
      

      如您所见,使用了ContentPresenter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多