2015-06-24 4 views
0

Я пытаюсь установить различные DataTemplates в ListBox в зависимости от страниц ActualWidth. В сущности, я хотел бы отобразить больше данных, чтобы заполнить пустое пространство.DataTemplateSelector get parent ActualWidth

Поскольку элемент, который он сам определяет, также является параметром для использования DataTemplate. Я считаю, что лучший способ - использовать DataTemplateSelector.

Что было бы лучшим способом достичь этого, поскольку я не нашел способа добавить DependencyProperty к DataTemplateSelector.

ответ

0

При использовании DataTemplateSelector вы получаете доступ к элементу данных, к которому применяется DataTemplate. С DataTemplateSelector страницы на MSDN:

public class TaskListDataTemplateSelector : DataTemplateSelector 
{ 
    public override DataTemplate 
     SelectTemplate(object item, DependencyObject container) 
    { 
     FrameworkElement element = container as FrameworkElement; 

     if (element != null && item != null && item is Task) 
     { 
      Task taskitem = item as Task; 

      if (taskitem.Priority == 1) 
       return 
        element.FindResource("importantTaskTemplate") as DataTemplate; 
      else 
       return 
        element.FindResource("myTaskTemplate") as DataTemplate; 
     } 

     return null; 
    } 
} 

Обратите внимание, как параметр object item входа приводятся к фактическому типу элемента в приведенном выше примере. Поэтому вы можете добавить свойство в свой класс элементов данных для хранения информации о размере, с помощью которой вы можете определить, к какому DataTemplate применить.

+0

Спасибо. Но это означает, что я должен, указывая, изменять элементы, исходящие из (в данном случае) SQL-сервера - то, что я бы предпочел не делать. Будет ли другой способ сделать какую-то статическую переменную приложения? –

+0

Либо создайте класс Singleton, либо просто статический класс со статической переменной в нем. Затем вы можете получить доступ к нему из любого места, например, «Singleton.Instance.YourProperty». – Sheridan