如何按照MVVM模式绑定整个数据网格以查看MVVM

时间:2018-07-17 12:12:03

标签: c# wpf mvvm datagrid

我想以表格的形式动态显示数据。我出于不同原因选择的控件是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?我想要内置在数据网格中的功能,例如移动列,标记特定行等。

1 个答案:

答案 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();
}