我想以表格的形式动态显示数据。我出于不同原因选择的控件是DataGrid
。该解决方案在一定程度上可行,但是当我需要动态更改要在数据网格中显示的属性时,遇到了问题。当我将其ItemsSource
直接绑定到可观察对象时,它会显示特定对象中的所有属性,这些属性我不需要。我想以编程方式创建一个数据网格并将其以某种方式推送到视图中。那有可能吗?
我已经看了很久了,但是似乎找不到一个好的解决方案。解决方案遵循MVVM模式也很重要。
public class MyViewModel
{
public Datagrid dataGrid = null;
public MyObject gridObject = null;
public MyViewModel ()
{
gridObject = new MyObject();
dataGrid = CreateDataGrid(gridObject);
}
private Datagrid CreateDataGrid(object objectName) {}
}
此后,我想将网格绑定到XAML。有可能还是有更好的方法,而不是DataGrid
?我想要内置在数据网格中的功能,例如移动列,标记特定行等。
答案 0 :(得分:2)
您不应在视图模型中创建DataGrid
。这不是MVVM。您可以在视图中创建它。
如果您不希望DataGrid
为您自动生成列,则应将其AutoGenerateColumns
属性设置为false
。
然后您可以在XAML标记中定义所需的列:
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="..." Binding="{Binding Property}" />
</DataGrid.Columns>
</DataGrid>
或以编程方式:
dataGrid.Columns.Add(new DataGridTextColumn() { Header = "header...", Binding = new Binding("Property") });
视图模型应该从视图中的IEnumerable<T>
绑定到的公共属性中返回DataGrid
:
<DataGrid ItemsSource="{Binding ViewModelCollection}" ...
请确保将视图的DataContext
设置为视图模型的实例,以使绑定起作用:
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}