Передать данные в селектор шаблонов данных - PullRequest
4 голосов
/ 16 марта 2010

Как вы, ребята, передаете данные (параметр) в DataTemplate Selector?

Единственное, о чем я могу подумать, это использовать вложенное свойство в DataTemplate Selector?

Пример:

public class DisableWeekendsSelection : DataTemplateSelector
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Justification = "DependencyProperty")]
        public static readonly DependencyProperty Parameter =
           DependencyProperty.RegisterAttached("Parameter", typeof(ObservableCollection<Date>), typeof(DisableWeekendsSelection),
           new FrameworkPropertyMetadata(null,
               FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

        public static ObservableCollection<Date> GetParameter(DependencyObject dp)
        {
            return dp.GetValue(Parameter) as ObservableCollection<Date>;            
        }

        public static void SetParameter(DependencyObject dp, ObservableCollection<Date> value)
        {            
            dp.SetValue(Parameter, value);
        }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {

Проблема с этим подходом заключается в том, что я не могу получить значение параметра в методе SelectTemplate.

Любое предложение будет оценено. Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Это немного проще.В обработчике:

SelectTemplate(object item, DependencyObject container)

Контейнер находится в логическом дереве.Вы можете восстановить дерево, чтобы добраться до своего UserControl, и у вас будет доступ к свойствам этого элемента управления и DataContext.Вот так:

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
    var _Container = Library.TreeHelper.TryFindParent<MyUserControl>(container);

Вот вспомогательный метод: http://www.hardcodet.net/2009/06/finding-elements-in-wpf-tree-both-ways

0 голосов
/ 18 марта 2010

Обходные

  1. Использовать вложенное свойство и приватную статическую переменную

  2. Пройти по дереву визуалов doc.OfParentType <>

0 голосов
/ 16 марта 2010

Обычным решением является использование свойств параметра элемента для получения необходимой информации для выбора правильного шаблона.

Если у вас есть ViewModel , он может содержать необходимые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...