Estoy tratando de mostrar un solo elemento (no contenido en una colección) usando un DataTemplate. Esto es lo que tengo hasta ahora, que no muestra nada. Al reemplazar ItemsControl
con ListBox
aparece un cuadro de lista vacío (entonces sé que el elemento está allí).¿Cómo puedo mostrar un solo elemento usando una plantilla de datos en Silverlight?
<ItemsControl
ItemsSource="{Binding Session}"
ItemTemplate="{StaticResource SessionHeaderDataTemplate}"
/>
Session
es un objeto único. Quiero utilizar DataTemplate porque estoy mostrando la misma información en otra parte de mi aplicación y quería que el estilo de la presentación se definiera como un recurso para poder actualizarlo en un solo lugar.
¿Alguna idea, o debería crear una colección de 1 elemento en mi ViewModel y enlazar a eso?
Editar: Esto es lo que terminé haciendo, aunque la respuesta a continuación también es una solución. Estoy bastante apegado a mi DataTemplates
por lo que no me siento cómodo teniendo algo así como expulsado a otro archivo XAML.
XAML:
<ItemsControl
DataContext="{Binding}"
ItemsSource="{Binding Session_ListSource}"
ItemTemplate="{StaticResource SessionHeaderDataTemplate}" />
modelo de vista:
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");
}
}
}
¡Exactamente lo que buscaba! – geofftnz
No pensé en eso, buen – mattmanser
Estoy de acuerdo con no crear un UserControl. Esto funciona, y es mucho más simple que UserControl. –