如何在ViewModel中设置DataGrid的内容

时间:2013-09-11 20:56:54

标签: c# wpf mvvm datagrid

我正在将代码隐藏中的DataGrid移动到ViewModel-UserControl结构中。在代码隐藏中时,DataGrid的设置设置如此......

public Window1()
{
     setDataGrid();
}

public class Data
{
     public int inOutNum { set; get; }
     public string input { set; get; }
     public string output { set; get; }
}

public static void setDataGrid()
{
     //Query for Window1
     var mainWindow = Application.Current.Windows
         .Cast<Window1>()
         .FirstOrDefault(window => window is Window1) as Window1;

     for (int i = 1; i <= 16; i++)
     {
         mainWindow.dataGrid.Items.Add(new Data() { inOutNum = i - 1, input = "", output = ""});
     }
}

<DataGridTextColumn Binding="{Binding Path=inOutNum}" Width="15" />
<DataGridTextColumn Binding="{Binding Path=input}" Header="Inputs" Width="160" />
<DataGridTextColumn Binding="{Binding Path=output}" Header="Outputs" Width="160" />

当切换到View Model结构时,我想摆脱使用上面使用的窗口查询(因为我猜测这是使用网格的错误方法)。当我将上述c#代码放入ViewModel时,程序无法在添加内容的循环中看到DataGrid如何更改我拥有的代码,以便将其正确添加到我的DataGrid新位置?

1 个答案:

答案 0 :(得分:1)

您应该为窗口创建一个ViewModel类,其中包含一个集合(通常是一个ObservableCollection)或您的Data对象。然后,要将它们连接起来,您需要将Window的DataContext设置为新的ViewModel类,并将DataGrid的ItemsSource设置为ObservableCollection