Я тоже это попробовал, тоже не получилось. Я предполагаю, что отчасти причина в том, что XamlParser не найдет его, если его нет в строке для анализа.

у показать данные в сетке данных wpftoolkit, где данные являются коллекцией

public class Thing
{
    public string Foo { get; set; }
    public string Bar { get; set; }
    public List<Candidate> Candidates { get; set; }
}

public class Candidate
{

    public string Name { get; set; }
    public CandidateType CandidateType { get; set; }
}

public enum CandidateType
{
    Type1,
    Type2,
    Type42
}

где число кандидатов в списке кандидатов настраивается во время выполнения.

Желаемая сетка выглядит следующим образом

Foo | Bar | Candidate 1 | Candidate 2 | ... | Candidate N

Таким образом, кажется, я не могу создать DataTemplate для кандидатов в xaml, так как выражение привязки изменится.

Я добавляю необходимые столбцы в событие AutoGeneratedColumns так:

private void DataGrid_AutoGeneratedColumns(object sender, EventArgs e)
{
    ViewModel vm = DataContext as ViewModel;

    for (int i = 0; i < vm.LotsOfThings.First().Candidates.Count; i++)
    {
        string assName = Assembly.GetExecutingAssembly().GetName().Name;
        ParserContext ctx = new ParserContext();
        ctx.XamlTypeMapper = new XamlTypeMapper(new string[] { assName });
        ctx.XamlTypeMapper.AddMappingProcessingInstruction("src", "WpfToolkitDataGridTester", assName);
        ctx.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
        ctx.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
        ctx.XmlnsDictionary.Add("src", "clr-namespace:WpfToolkitDataGridTester;assembly=" + assName);
        var template = XamlReader.Parse(@"<DataTemplate>
                                            <DataTemplate.Resources>
                                                <src:FooConverter x:Key='fooConverter' />
                                            </DataTemplate.Resources>
                                            <TextBlock  
                                                Foreground='{Binding Candidates[" + i + @"].CandidateType,Converter={StaticResource fooConverter}}'
                                                Text='{Binding Candidates[" + i + @"].Name}' />
                                        </DataTemplate>", ctx) as DataTemplate;
        dg.Columns.Add(new DataGridTemplateColumn
        {
            Header = "Candidate " + (i + 1),
            CellTemplate = template
        });
    }
}

Однако это происходит со следующим исключением: тег «FooConverter» не существует в пространстве имен XML «clr-namespace: WpfToolkitDataGridTester; assembly = WpfToolkitDataGridTester». Строка «3» Позиция «54».

Изменение StaticResource на DynamicResource не вносит изменений.

Что мне не хватает?

FWIW: жестко закодированная табличка с данными

<DataTemplate x:Key="candidateTemplate">
  <DataTemplate.Resources>
    <src:FooConverter x:Key="fooConverter" />
  </DataTemplate.Resources>
  <TextBlock 
    Foreground="{Binding Candidates[0].CandidateType,Converter={StaticResource fooConverter}}"
    Text="{Binding Candidates[0].Name}" />
</DataTemplate>

и шаблон столбца определен так

<wpftk:DataGridTemplateColumn CellTemplate="{StaticResource candidateTemplate}" />

'работает', но, очевидно, не дает желаемого результата, поскольку кандидаты [0] жестко закодированы.

Ответы на вопрос(3)

Ваш ответ на вопрос