Domanda

Come posso creare un modello di dati Silverlight nel codice?Ho visto molti esempi per WPF, ma niente per Silverlight.

Modificare:Ecco il codice per cui lo sto utilizzando, in base alla risposta di Santiago di seguito.

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

Funziona davvero bene e mi permette di cambiare l'attacco al volo.

È stato utile?

Soluzione

Sebbene non sia possibile crearlo a livello di programmazione, puoi caricarlo da una stringa XAML in un codice come questo:

    public static DataTemplate Create(Type type)
    {
        return (DataTemplate) XamlReader.Load(
            @"<DataTemplate
                xmlns=""http://schemas.microsoft.com/client/2007"">
                <" + type.Name + @"/>
              </DataTemplate>"
          );
    }

Lo snippet sopra crea un modello di dati contenente un singolo controllo, che potrebbe essere un controllo utente con i contenuti necessari.

Altri suggerimenti

Ho avuto alcuni problemi con questo codice, ottenendo eccezioni per elementi non rilevati.Solo per riferimento, avevo bisogno che il mio spazio dei nomi fosse incluso nel DataTemplate...

private DataTemplate Create(Type type)
        {
            string xaml = @"<DataTemplate 
                xmlns=""http://schemas.microsoft.com/client/2007""
                xmlns:controls=""clr-namespace:" + type.Namespace + @";assembly=" + type.Namespace + @""">
                <controls:" + type.Name + @"/></DataTemplate>";
            return (DataTemplate)XamlReader.Load(xaml);
        }

Sì, Silverligt 4 è più vecchio delle versioni attuali di WPF.Quando aggiungi un modello come risorsa, ad es.Come ho fatto ho aggiunto un modello UserControl in Application.xaml FleedResources tra Resourcedictionary.In XAML se il tag implementa IDictionary potresti utilizzare l'attributo x:Key.Come quello

   <ResourceDictionary>
    <DataTemplate x:Key="TextBoxEditTemplate">
    <Some user control x:Name="myOwnControl" />
    </DataTemplate>
   </ResourceDictionary>

OK!Puoi raggiungere il tuo modello codificandolo, Applicazione.Current.resources["TextBoxEditTemplate"]d'altra parte alcuni metodi per trovare membri di questo modello non funzioneranno.Oltre a questo DataTemplate non implementa IDictionary quindi non è possibile assegnare l'attributo x:Key per gli elementi in questo dataTemplate.come myOwnControl nell'esempio.

Senza xaml, l'attuale Silverlight presenta alcune restrizioni sulla creazione di DataTemplate code-behind completamente dinamici. Funziona anche su WPF.

Ad ogni modo, la soluzione migliore a questo punto è la creazione di uno script XAML per datatemplate, è possibile assegnare alcuni elementi valori nello script DataTemplate.Abbiamo creato i nostri controlli utente con alcune proprietà con DependencyObjectProperty...

Alla fine, se il tuo oggetto non ha ereditarietà, ad es.non un MyControl:UserControl che potresti ereditare Il mio oggetto: oggetto dipendenza in questo modo puoi raggiungere il tuo oggetto chiamando come Application.Current.Resources.FirstChilderen...

FindName funziona solo in WPF

citazione da MSDN:

L'utilizzo XAML che definisce il contenuto per la creazione di un modello di dati non viene esposto come proprietà impostabile.Si tratta di un comportamento speciale integrato nell'elaborazione XAML di un elemento oggetto DataTemplate.

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