Здравствуйте, MAMOHT, Вы писали:
MAM>Доброго времени суток.
MAM>Я делаю сложный грид, в котором количество столбцов зависит от количество дней в месяце.
MAM>В связи с этим создаю столбцы и назначаю им биндинг программно примерно так:
MAM>Но проблема в том, что я не могу залезть в этот шаблон и программно указать свой биндинг (посколько, шаблон выдает TemplateSelector, а он не знает, что это за столбец)
MAM>Кто-нибудь с таким сталкивался? Как обойти это ограничение?
Сталкивались. Если у вас есть необходимость программно устанавливать байндинг в шаблоне, то и сам шаблон создавайте из кода при помощи FrameworkElementFactory:
private class DynamicPathTemplateSelector : DataTemplateSelector
{
private readonly string displayPath;
private readonly string valuePath;
private readonly RadioGroup parent;
private DataTemplate controlTemplate;
public DynamicPathTemplateSelector(RadioGroup parent, string displayPath, string valuePath)
{
this.parent = parent;
this.displayPath = displayPath;
this.valuePath = valuePath;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (controlTemplate == null)
{
controlTemplate = new DataTemplate();
FrameworkElementFactory radioButtonFactory = new FrameworkElementFactory(typeof(RadioGroupButton));
FrameworkElementFactory textBlockFactory = new FrameworkElementFactory(typeof(TextBlock));
textBlockFactory.SetBinding(TextBlock.TextProperty, new Binding(displayPath));
radioButtonFactory.AppendChild(textBlockFactory);
Binding valueBinding = new Binding("Value");
valueBinding.Source = parent;
valueBinding.Mode = BindingMode.TwoWay;
radioButtonFactory.SetBinding(RadioGroupButton.ValueProperty, valueBinding);
Binding checkedValueBinding = new Binding(valuePath);
radioButtonFactory.SetBinding(RadioGroupButton.CheckedValueProperty, checkedValueBinding);
radioButtonFactory.SetValue(RadioButton.GroupNameProperty, RuntimeHelpers.GetHashCode(parent).ToString());
controlTemplate.VisualTree = radioButtonFactory;
controlTemplate.Seal();
}
return controlTemplate;
}
}
MAM>Спасибо.