by Tim Heuer via Method ~ of ~ failed by Tim Heuer on 5/25/2009 4:19:19 PM
If you looked at the updated RIA Services Business Application template which had the authentication built-in, you may have seen the login screen with a little icon next to the password field:
When you hover over this some helpful information displays in tool tip form:
So how did that get there? The power of the data annotations. If you look at your model definition, you can add a DisplayAttribute and provide some additional information. Let’s take a look at a simple example. Here’s the simple model:
1: public class PersonModel
2: {
3: public string FirstName { get; set; }
4: public string LastName { get; set; }
5: public string EmailAddress { get; set; }
6: public string Gender { get; set; }
7: public int Age { get; set; }
8: }
and the DataForm generated:
Not too helpful. Now, let’s modify our model with some attributes:
3: [Required()]
4: [Display(Name="First Name:")]
5: public string FirstName { get; set; }
6:
7: [Required()]
8: [Display(Name = "Last Name:")]
9: public string LastName { get; set; }
10:
11: [Display(Name = "Email Address:",
12: Description="We do not sell your information!")]
13: public string EmailAddress { get; set; }
14:
15: [Display(Description="Used for demographics")]
16: public string Gender { get; set; }
17:
18: public int Age { get; set; }
19: }
And here is the new auto generated DataForm:
Much more friendly to the user, and from a code perspective, we wouldn’t have to change how we work with our model. We get some free visuals and functionality with some simple attribute properties.
Also, did you know that you could bind multiple items to the DataForm and get automatic paging and add new functionality? Given this code:
1: ObservableCollection<PersonModel> people = new ObservableCollection<PersonModel>();
2: for (int i = 0; i < 10; i++)
3: {
4: PersonModel p = new PersonModel() { FirstName = "First" + i.ToString(), LastName = "Last " + i.ToString(), Age = i };
5: people.Add(p);
6: }
7:
8: DataBrowser.ItemsSource = people;
Check out what is generated:
Notice the pager and add new buttons. Nice. If you’re wondering how to get more granular control over the field displays, it is similar to DataGrid in that you can turn off auto generation of fields and provide your own implementation through custom DataFields:
1: <datacontrols:DataForm x:Name="DataBrowser" Width="400" AutoGenerateFields="False">
2: <datacontrols:DataForm.Fields>
3: <datacontrols:DataFormTextField Binding="{Binding FirstName}"
4: FieldLabelContent="First Name: " />
5: <datacontrols:DataFormTextField Binding="{Binding LastName}"
6: FieldLabelContent="Last Name: " />
7: <datacontrols:DataFormTemplateField FieldLabelContent="Age">
8: <datacontrols:DataFormTemplateField.DisplayTemplate>
9: <DataTemplate>
10: <TextBlock Text="{Binding Age}" FontSize="24" />
11: </DataTemplate>
12: </datacontrols:DataFormTemplateField.DisplayTemplate>
13: <datacontrols:DataFormTemplateField.EditTemplate>
14: <DataTemplate>
15: <TextBox Text="{Binding Age}" />
16: </DataTemplate>
17: </datacontrols:DataFormTemplateField.EditTemplate>
18: </datacontrols:DataFormTemplateField>
19: </datacontrols:DataForm.Fields>
20: </datacontrols:DataForm>
Hope this helps!
Original Post: Silverlight DataForm helpers
The content of the postings is owned by the respective author. Silverlight Feeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on Silverlight Feeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.