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); }
}
}