Решение Wallstreet Programmer хорошо работает для вас, потому что вы используете радиокнопки. Однако есть более общее решение, которое, как я думал, следует упомянуть будущим читателям этого вопроса.
Вы можете изменить свой DataTemplate для использования простого "{Binding}"
<DataTemplate x:Key="ItemDisplayTemplate">
<Border ...>
<TextBlock ...
Text="{Binding}" />
</Border>
</DataTemplate>
Тогда в коде вам не нужно воссоздавать полный DataTemplate. Все, что вам нужно сделать, это воссоздать это:
<DataTemplate>
<ContentPresenter Content="{Binding Name}" ContentTemplate="{StaticResource ItemDisplayTemplate}" />
</DataTemplate>
что легко:
private DataTemplate GeneratePropertyBoundTemplate(string property, string templateKey)
{
var template = FindResource(templateKey);
FrameworkElementFactory factory = new FrameworkElementFactory(typeof(ContentPresenter));
factory.SetValue(ContentPresenter.ContentTemplateProperty, template);
factory.SetBinding(ContentPresenter.ContentProperty, new Binding(property));
return new DataTemplate { VisualTree = factory };
}
Это особенно удобно, если у вас много свойств, даже в примере с переключателем.