WPF在MVVM模式中GridControl控件数据绑定
MVVM模式,DevExpress v20.2的dxg:GridControl控件
在xaml绑定数据源:
View
<dxg:GridControl Grid.Column="0" ItemsSource="{Binding Persons}"> dxg:GridControl.Columns <dxg:GridColumn FieldName="Name" Header="姓名"/> <dxg:GridColumn FieldName="Age" Header="年龄"/> </dxg:GridControl.Columns> dxg:GridControl.View <dxg:TableView ShowTotalSummary="True"/> </dxg:GridControl.View> </dxg:GridControl>
ViewModel
class MainWindowViewModel : ViewModelBase { public MainWindowViewModel() { Persons = new ObservableCollection(); Persons.Add(new Person("张三", 3)); Persons.Add(new Person("李四", 4)); Persons.Add(new Person("王五", 9)); Persons.Add(new Person("赵六", 6)); } public ObservableCollection Persons { get { return GetProperty(() => Persons); } set { SetProperty(() => Persons, value); } } }
public class Person:BindableBase
{
public Person(string Name,int Age)
{
this.Name = Name;
this.Age = Age;
}
public string Name
{
get { return GetProperty(() => Name); }
set { SetProperty(() => Name, value); }
}
public int Age
{
get { return GetProperty(() => Age); }
set { SetProperty(() => Age, value); }
}
}
结果:
在代码动态添加列并绑定:
View
<dxg:GridControl Grid.Column="1" x:Name="GridControl" ItemsSource="{Binding Persons}">
dxmvvm:Interaction.Triggers
<dxmvvm:EventToCommand EventName="Loaded" Command="{Binding GridControlLoadCmd}" CommandParameter="{Binding ElementName=GridControl}"/>
</dxmvvm:Interaction.Triggers>
dxg:GridControl.View
<dxg:TableView ShowTotalSummary="True"/>
</dxg:GridControl.View>
</dxg:GridControl>
ViewModel
public MainWindowViewModel() { Persons = new ObservableCollection(); Persons.Add(new Person("张三", 3)); Persons.Add(new Person("李四", 4)); Persons.Add(new Person("王五", 9)); Persons.Add(new Person("赵六", 6)); } public ObservableCollection Persons { get { return GetProperty(() => Persons); } set { SetProperty(() => Persons, value); } }
public DelegateCommand<GridControl> GridControlLoadCmd
{
get
{
return new DelegateCommand<GridControl>((e) => {
GridColumn gc = new GridColumn();
gc.Header = "姓名";
gc.Binding = new Binding()
{
Path = new PropertyPath("Name")
};
e.Columns.Add(gc);
GridColumn gc1 = new GridColumn();
gc1.Header = "年龄";
gc1.Binding = new Binding()
{
Path = new PropertyPath("Age")
};
e.Columns.Add(gc1);
});
}
}
}
public class Person:BindableBase
{
public Person(string Name,int Age)
{
this.Name = Name;
this.Age = Age;
}
public string Name
{
get { return GetProperty(() => Name); }
set { SetProperty(() => Name, value); }
}
public int Age
{
get { return GetProperty(() => Age); }
set { SetProperty(() => Age, value); }
}
}