Как отобразить один элемент с помощью DataTemplate в Silverlight?
Я пытаюсь отобразить один элемент (не содержащийся в коллекции) с помощью DataTemplate. Вот что у меня до сих пор, что ничего не показывает. Замена ItemsControl
на ListBox
отображает пустой список (так что я знаю, что элемент есть).
<ItemsControl
ItemsSource="{Binding Session}"
ItemTemplate="{StaticResource SessionHeaderDataTemplate}"
/>
Session
- это единственный объект. Я хочу использовать DataTemplate, потому что я показываю ту же информацию в другом месте в своем приложении и хотел, чтобы стиль презентации определялся как ресурс, поэтому я могу обновить его в одном месте.
Любые идеи, или я должен создать 1-элементную коллекцию в моей модели ViewModel и привязать ее к этому?
Изменить: Это то, что я закончил, хотя ответ ниже также является решением. Я довольно привязан к моему DataTemplates
, поэтому не чувствовал себя комфортно, когда что-то вроде этого вытолкнуло в другой файл XAML.
XAML:
<ItemsControl
DataContext="{Binding}"
ItemsSource="{Binding Session_ListSource}"
ItemTemplate="{StaticResource SessionHeaderDataTemplate}" />
ViewModel:
private Session m_Session;
public Session Session
{
get { return m_Session; }
set
{
if (m_Session != value)
{
m_Session = value;
OnPropertyChanged("Session");
// Added these two lines
Session_ListSource.Clear();
Session_ListSource.Add(this.Session);
}
}
}
// Added this property.
private ObservableCollection<Session> m_Session_ListSource = new ObservableCollection<Session>();
public ObservableCollection<Session> Session_ListSource
{
get { return m_Session_ListSource; }
set
{
if (m_Session_ListSource != value)
{
m_Session_ListSource = value;
OnPropertyChanged("Session_ListSource");
}
}
}
Ответы
Ответ 1
Придерживайтесь своих данных для простых представлений без кода вместо того, чтобы создавать другие пользовательские элементы управления. Используйте ContentControl для отображения вашего DataTemplate для одного элемента.
<ContentControl
ContentTemplate="{StaticResource SessionHeaderDataTemplate}"
Content="{Binding Path=Session}" />
Ответ 2
Вам не нужно использовать элемент ItemsControl для этого, просто создайте пользовательский элемент управления, а затем привяжите его, например.
<TestProject:myControl DataContext="{Binding Session}" />
Пользовательский элемент управления может иметь собственный файл xaml, поэтому он может выглядеть так, как вы хотите.