2015-03-31 63 views
0

我有这样一个模板制定有约束力的DataTemplate中的元素编程

<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异常机智描述:

此操作只适用于那些该模板适用

回答

0

通常获得在控制元件安装时间,你必须调用方法LoadContent();

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

+0

谢谢,但这并没有解决这个问题。 – Yola 2015-04-01 06:31:37

0

你可以在他的博客上找到关于你的问题(以及当然的解决方案)的完整解释,由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使用。