¿Cómo puedo enlazar un control WPF del contenido a su contenedor DataContext para que yo pueda aplicar un DataTemplateSelector basa en que el objeto?

StackOverflow https://stackoverflow.com/questions/5036835

  •  15-11-2019
  •  | 
  •  

Pregunta

Estoy tratando de enlazar una ventana WPF en la cima de una Perspective que contiene dos conjuntos, a y B.Estoy intentando utilizar DataTemplates para mostrar ya sea a o B, dependiendo de la configuración de una bandera en mi ViewModel.

A tal fin, he conjunto de la ventana DataContext = ViewModel.Sin embargo, cuando intento enlazar un ContentControl para que DataContext y aplicar un DataTemplateSelector para él, la item parámetro del selector SelectTemplate(object item, DependencyObject container) el método es siempre null:

<Window [snip] Title="MainWindow">
    <Window.Resources>
        <!-- DataTemplate and Selector declarations -->
    </Window.Resources>
    <Grid>
        <ContentControl Content="{Binding}"              
                        ContentTemplateSelector="{StaticResource templateSelector}" />
    </Grid>    
</Window>

Cómo debería ser vinculante que ContentControl tal que la Ventana Perspective pasarán a través de su DataTemplateSelector?

¿Fue útil?

Solución

esto funcionó para mí:

<ContentControl Content="{Binding DataContext, RelativeSource={RelativeSource Self}}"              
                    ContentTemplateSelector="{StaticResource templateSelector}" />

Editar:

Estoy de acuerdo con Aarón, sin embargo, que esto podría no ser la mejor manera de lograr las cosas.Usted dijo que usted está usando un ViewModel.La manera más fácil sería obligar a su ItemsControl a un nuevo "SelectedCollection" de la propiedad en el Viewmodel que expone la quería colección.A continuación, en su bandera (suponiendo que se trata de una propiedad) puede disparar propertychanged para "SelectedCollection".

Otros consejos

Un montón de cosas que están pasando aquí...

Usted dijo que usted es el uso de la DataTemplateSelector para mostrar la colección de Una o de la colección de B, mientras que, al mismo tiempo, usted ha declarado que son la creación de una de las colecciones como la DataContext de la Ventana.

Si desea ocultar los datos en una colección de realizar el filtrado de la colección en sí.Otro enfoque es el de ejecutar la unión a través de un IValueConverter o IMultiValueConverter.Sin embargo, otra solución podría ser tener dos elementos de interfaz de usuario enlazado a cada colección, respectivamente, y cambiar el Visiblity el elemento de interfaz de usuario basado en el valor en su ViewModel.

Un montón de opciones diferentes...y si he entendido correctamente la DataTemplateSelector no debe ser uno de ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top