Imports System
Imports System.Collections.Generic
Imports System.ComponentModel.DataAnnotations
Imports DevExpress.Mvvm.DataAnnotations
Namespace pgrid_attribute
Public Class EmployeesViewModel
Private privateData As EmployeesData
Public Overridable Property Data() As EmployeesData
Get
Return privateData
End Get
Protected Set(ByVal value As EmployeesData)
privateData = value
End Set
End Property
Public Sub New()
Data = New EmployeesData() With {.FirstName = "Anita", .LastName = "Benson", .Group = "Inventory Management", .HireDate = New Date(2002, 2, 2), .Salary = 65000D, .Phone = "7138638137", .Email = "Anita_Benson@example.com", .AddressLine1 = "9602 South Main", .AddressLine2 = "Seattle, 77025, USA", .BirthDate = New Date(1985, 3, 18)}
End Sub
End Class
Public Class EmployeesData
Private Const JobGroup As String = "Job"
Private Const ContactGroup As String = "Contact"
Private Const AddressGroup As String = "Address"
Private Const Personal As String = "Personal"
Private Const NameGroup As String = "Name"
<Display(GroupName := NameGroup, Name := "First name")> _
Public Property FirstName() As String
<Display(GroupName := NameGroup, Name := "Last name")> _
Public Property LastName() As String
<Display(GroupName := JobGroup)> _
Public Property Group() As String
<DisplayFormat(NullDisplayText := "Title not set"), Display(GroupName := JobGroup)> _
Public Property Title() As String
<Display(GroupName := JobGroup, Name := "Hire date")> _
Public Property HireDate() As Date
<Display(GroupName := JobGroup), DataType(DataType.Currency)> _
Public Property Salary() As Decimal
<Display(GroupName := JobGroup, Name := "Clients"), InstanceInitializer(GetType(Clients), "New Client")> _
Public Property Clients() As Object
<Display(GroupName := ContactGroup), DataType(DataType.PhoneNumber)> _
Public Property Phone() As String
<Display(GroupName := ContactGroup), DataType(DataType.EmailAddress)> _
Public Property Email() As String
<Display(GroupName := Personal, Name := "Birth date"), DisplayFormat(DataFormatString := "m", ApplyFormatInEditMode := True)> _
Public Property BirthDate() As Date
<Display(GroupName := AddressGroup, Name := "Address line 1")> _
Public Property AddressLine1() As String
<Display(GroupName := AddressGroup, Name := "Address line 2")> _
Public Property AddressLine2() As String
End Class
Public Class Client
Public Property FirstName() As String
Public Property LastName() As String
Public Property Phone() As String
End Class
Public Class Clients
Inherits List(Of Client)
End Class
End Namespace
Imports System
Imports System.Collections.Generic
Imports System.Windows
Imports System.Windows.Markup
Imports DevExpress.Mvvm.Native
Namespace pgrid_attribute
Partial Public Class MainWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
End Class
Public Class ItemInitializer
Inherits MarkupExtension
Implements IInstanceInitializer
Public Overrides Function ProvideValue(ByVal serviceProvider As IServiceProvider) As Object
Return Me
End Function
Private Function IInstanceInitializer_CreateInstance(ByVal type As TypeInfo) As Object Implements IInstanceInitializer.CreateInstance
Return Date.Today
End Function
Private ReadOnly Property IInstanceInitializer_Types() As IEnumerable(Of TypeInfo) Implements IInstanceInitializer.Types
Get
Return New List(Of TypeInfo)() From {New TypeInfo(GetType(Date), "Today")}
End Get
End Property
End Class
End Namespace
<Window x:Class="pgrid_attribute.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:dxprg="http://schemas.devexpress.com/winfx/2008/xaml/propertygrid"
xmlns:local="clr-namespace:pgrid_attribute"
dx:ThemeManager.ThemeName="Office2013"
Title="MainWindow" Height="450" Width="600"
DataContext="{dxmvvm:ViewModelSource Type={x:Type local:EmployeesViewModel}}">
<Grid>
<dxprg:PropertyGridControl
x:Name="pGrid"
ShowCategories="True"
ExpandCategoriesWhenSelectedObjectChanged="True" SelectedObject="{Binding Data}">
<dxprg:PropertyDefinition Path="HireDate" InstanceInitializer="{local:ItemInitializer}"/>
</dxprg:PropertyGridControl>
</Grid>
</Window>
<Application x:Class="pgrid_attribute.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
Imports System
Imports System.Collections.Generic
Imports System.Configuration
Imports System.Data
Imports System.Linq
Imports System.Threading.Tasks
Imports System.Windows
Namespace pgrid_attribute
''' <summary>
''' Interaction logic for App.xaml
''' </summary>
Partial Public Class App
Inherits Application
End Class
End Namespace
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using DevExpress.Mvvm.DataAnnotations;
namespace pgrid_attribute {
public class EmployeesViewModel {
public virtual EmployeesData Data { get; protected set; }
public EmployeesViewModel() {
Data = new EmployeesData() {
FirstName = "Anita",
LastName = "Benson",
Group = "Inventory Management",
HireDate = new DateTime(2002, 2, 2),
Salary = 65000m,
Phone = "7138638137",
Email = "Anita_Benson@example.com",
AddressLine1 = "9602 South Main",
AddressLine2 = "Seattle, 77025, USA",
BirthDate = new DateTime(1985, 3, 18)
};
}
}
public class EmployeesData {
const string JobGroup = "Job";
const string ContactGroup = "Contact";
const string AddressGroup = "Address";
const string Personal = "Personal";
const string NameGroup = "Name";
[Display(GroupName = NameGroup, Name = "First name")]
public string FirstName { get; set; }
[Display(GroupName = NameGroup, Name = "Last name")]
public string LastName { get; set; }
[Display(GroupName = JobGroup)]
public string Group { get; set; }
[DisplayFormat(NullDisplayText = "Title not set"), Display(GroupName = JobGroup)]
public string Title { get; set; }
[Display(GroupName = JobGroup, Name = "Hire date")]
public DateTime HireDate { get; set; }
[Display(GroupName = JobGroup), DataType(DataType.Currency)]
public decimal Salary { get; set; }
[Display(GroupName = JobGroup, Name = "Clients")]
[InstanceInitializer(typeof(Clients), "New Client")]
public object Clients { get; set; }
[Display(GroupName = ContactGroup), DataType(DataType.PhoneNumber)]
public string Phone { get; set; }
[Display(GroupName = ContactGroup), DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Display(GroupName = Personal, Name = "Birth date")]
[DisplayFormat(DataFormatString = "m", ApplyFormatInEditMode = true)]
public DateTime BirthDate { get; set; }
[Display(GroupName = AddressGroup, Name = "Address line 1")]
public string AddressLine1 { get; set; }
[Display(GroupName = AddressGroup, Name = "Address line 2")]
public string AddressLine2 { get; set; }
}
public class Client {
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
}
public class Clients : List<Client> { }
}
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Markup;
using DevExpress.Mvvm.Native;
namespace pgrid_attribute {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
public class ItemInitializer : MarkupExtension, IInstanceInitializer {
public override object ProvideValue(IServiceProvider serviceProvider) {
return this;
}
object IInstanceInitializer.CreateInstance(TypeInfo type) {
return DateTime.Today;
}
IEnumerable<TypeInfo> IInstanceInitializer.Types {
get {
return new List<TypeInfo>() {
new TypeInfo(typeof(DateTime), "Today"),
};
}
}
}
}