2009-02-18 10 views
14

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"); 
      } 
     } 
    } 

Respuesta

29

Pegue con sus plantillas de datos para vistas simples sin código detrás en lugar de tener que crear otros controles de usuario. Use un ContentControl para mostrar su DataTemplate para un solo elemento.

<ContentControl 
     ContentTemplate="{StaticResource SessionHeaderDataTemplate}" 
     Content="{Binding Path=Session}" /> 
+2

¡Exactamente lo que buscaba! – geofftnz

+0

No pensé en eso, buen – mattmanser

+0

Estoy de acuerdo con no crear un UserControl. Esto funciona, y es mucho más simple que UserControl. –

1

No es necesario utilizar un ItemsControl de hacer eso, basta con crear un control de usuario personalizado, a continuación, enlazar a que, por ejemplo,

<TestProject:myControl DataContext="{Binding Session}" /> 

El control personalizado puede tener su propio archivo xaml para que pueda verse como usted lo desee.

+0

voy a marcar esto como la respuesta porque es una solución viable, pero terminó haciendo una colección 1-elemento de unirse a porque prefiero mantener todos mis plantillas de datos reutilizables en un solo lugar. – geofftnz

Cuestiones relacionadas