Domanda

Ho un ItemsControl il cui ItemsSource viene associato a un ObservableCollection < Component > in fase di esecuzione. Ho definito un modello di dati per tipo Component che funziona bene.

Ora il componente ha un ObservableCollection <=> Control > e voglio aggiungere un altro ItemsControl nel mio Component Datatemplate per rendere tutti i controlli. Il controllo qui è il mio oggetto personalizzato non correlato a un controllo wpf.

Esistono diversi tipi di controlli, quindi sto cercando di utilizzare un ItemTemplateSelector per selezionare il modello giusto per ciascun tipo. Nell'esempio seguente per mantenerlo piccolo ho mostrato solo uno dei template & Quot; RWString & Quot; che trovo usando un FindResource in MyControlTemplateSelector che ignora SelectTemplate. Ma SelectTemplate non viene mai chiamato (usando un breakpoint per verificare). C'è qualcosa di sbagliato nel mio xaml?

<ItemsControl.Resources>
    <src:MyControlTemplateSelector x:Key="XSelector" />
    <DataTemplate DataType="{x:Type src:Component}"  >
        <Expander Visibility="{Binding Path=Show}">
                <ItemsControl ItemsSource="{Binding Path=Contrls}" 
                          ItemTemplateSelector="{StaticResource XSelector}">
                <ItemsControl.Resources>
                    <DataTemplate x:Key="RWstring" >
                        <TextBlock Text="{Binding Path=Label}"/>
                    </DataTemplate>
                </ItemsControl.Resources>
                <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </Expander>
    </DataTemplate>
</ItemsControl.Resources>

Aggiornamento: Contrls non è un errore di battitura, sono solo io che utilizzo un sistema di denominazione sciocco. Contrls è una proprietà del componente di tipo ObservableCollection. Anche il motivo per cui sto provando a utilizzare ItemsTemplateSelector è che ObservableCollection <=> Control & Gt; contiene oggetti di tipo generico come Control <=> int > & Controllo <=> stringa gt; ecc. tutto derivante da Control e apparentemente non è possibile creare piastre dati riferite a tipi generici.

Aggiornamento3: rimosso l'aggiornamento 2 in quanto non correlato. Ho fatto funzionare ItemTemplateSelector cambiando StaticResource in DynamicResource. Ma non so perché funzioni ...

È stato utile?

Soluzione

Suppongo che questo non funzioni con uno StaticResource poiché la risorsa è all'interno di ItemsControl che probabilmente non è stata creata al momento del caricamento quando vengono valutati StaticResource.

DynamicResources al momento del caricamento vengono valutati su un'espressione al momento del caricamento e quindi valutati al valore corretto quando richiesto.

Prova a spostare la risorsa all'esterno di ItemsControl.

Altri suggerimenti

Nella riga in cui si associa il comando ItemControl nidificato, il percorso è corretto? Attualmente è & Quot; Contrls & Quot ;, dovrebbe essere & Quot; Controls & Quot ;?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top