Я хочу, чтобы показать данные в wpftoolkit DataGrid, где данные коллекциядинамический DataTemplate с ValueConverter
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-имен: WpfToolkitDataGridTester; сборка = WpfToolkitDataGridTester. Строка '3' Позиция '54'.
Изменение значения StaticResource для DynamicResource не изменяет.
Что мне не хватает?
FWIW: а жёстко DataTemplate
<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] является жёстко.
Я тоже попробовал, это тоже не сработало. Я предполагаю, что причина в том, что XamlParser не найдет его, если он не в синтаксическом анализе. – mostlytech