Sto cercando di capire DataForm come implementato nel toolkit di novembre 2009 e non riesco a capire come associare un ComboBox a un enum. Qualcuno sa come il DataForm fa questo automaticamente?In che modo Silverlight DataForm genera automaticamente un'associazione da un ComboBox a un enum?
Sfondo
Per prima cosa ho creato una classe e un Enum, seguendo this articolo e ha permesso il DataForm per generare i campi. DataForm ha generato un controllo TextBox per il campo stringa Nome e (cosa presumo che sia) un ComboBox per il campo enum Generi.
Il mio primo obiettivo nel capire come personalizzare il DataForm è riprodurre ciò che viene prodotto nella generazione automatica. Sono riuscito a fare i TextBoxes (e il DatePicker, escluso da questo codice) ma ho difficoltà a legare il ComboBox all'enum.
Qui ci sono le classi (semplificato):
public class Movie
{
public string Name { get; set; }
public Genres Genre { get; set; }
}
public enum Genres
{
Comedy,
Fantasy,
Drama,
Thriller
}
e poi in MainPage sto facendo questo:
private ObservableCollection<Movie> movies = new ObservableCollection<Movie>();
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Movie movie = new Movie() { Name = "Fred", Genre = Genres.Thriller };
movies.Add(movie);
myDataForm.ItemsSource = movies;
}
e nel MainPage.xaml, nella Griglia:
<dataFormToolkit:DataForm x:Name="myDataForm" AutoEdit="False" AutoCommit="False"
Header="Foo Movie DB">
</dataFormToolkit:DataForm>
per le cose generate automaticamente. Quando provo a generarlo manualmente, ho invece ottenuto:
<dataFormToolkit:DataForm x:Name="myDataForm" AutoEdit="False" AutoCommit="False"
Header="Foo Movie DB">
<StackPanel Orientation="Vertical">
<dataFormToolkit:DataField>
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
</dataFormToolkit:DataField>
<dataFormToolkit:DataField>
<ComboBox ItemsSource="{Binding Genres}"
SelectedItem="{Binding Genre, Mode=TwoWay}" />
</dataFormToolkit:DataField>
</StackPanel>
</dataFormToolkit:DataForm>
ma il ComboBox non funziona. Ci sono molti articoli che trattano questo, ma sembra che gran parte di ciò che propongono sia troppo per fare un auto-generatore (ad esempio la sottoclasse di ComboBox per fornire SelectedValue). Sai come gli strumenti lo fanno per noi?
Sembra che si potrebbe usare la vostra prima upvote ... buona risposta . – mkedobbs
È una buona risposta dettagliata ma non ho chiesto come potrei farlo, ho chiesto come lo fa DataForm, quindi non l'ho accettato come risposta. – serialhobbyist