WPF DataGrid设置ItemsSource时不显示数据

时间:2015-05-07 11:59:40

标签: c# wpf datagrid

我正在尝试使用Visual Studio 2010中的C#从我的sdf文件更新DataGrid.DataGrid如下所示。

<Grid Height="auto" Name="grid1" Width="auto" >
    <Grid.RowDefinitions>
        <RowDefinition Height="{Binding ElementName=grid1, Path=ActualHeight}"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="200" Width="200" Name="DGWidth"/>
        <ColumnDefinition MinWidth="600" Name="PIWidth"/>
    </Grid.ColumnDefinitions>
    <DataGrid AutoGenerateColumns="True" 
              Grid.Column="1" Grid.Row="0" 
              Height="{Binding ElementName=grid1, Path=ActualHeight}" 
              HorizontalAlignment="Left" 
              Name="PIView" 
              VerticalAlignment="Top" 
              Width="{Binding ElementName=PIWidth, Path=ActualWidth}"
              IsReadOnly="True"/>
</Grid>

我正在尝试填充PIView DataGrid。为此,我将DataGrid引用传递给管理器类中的方法updatePIView

 public class PTManager
{

    public PTManager()
    {
    }

    public void updatePIView(ref DataGrid pIView, DateTime datetime)
    {
        PTDate date = PTDatabase.GetDt(datetime);
        SqlCeDataAdapter adapter = PTDatabase.GetAdaperForPIViewForDt(date);
        DataTable table = new DataTable();
        adapter.Fill(table);
        pIView.ItemsSource = table.DefaultView;
    }
}

我正在设置ItemsSource的方法。它适用于另一个DataGrid(带有一个列表),它在加载主窗口后加载。

我正在尝试在PIView上加载选择事件中的数据。我可以在表格中看到数据。但是当表的默认视图设置为ItemsSource时没有任何反应。 WPF不会产生任何错误或警告。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

请不要像使用Windows窗体一样使用WPF ...它的不是 Windows窗体。

在WPF中,我们使用DataGrid通过以适当的形式将数据加载到属性中,并将数据绑定到DataGrid.ItemsSource属性,如下所示:

<DataGrid ItemsSource="{Binding YourCollectionProperty}" ... />

...

// preferably implement `INotifyPropertyChanged` interface on this property
public ObservableCollection<YourDataType> YourCollectionProperty { get; set; }

...

YourCollectionProperty = new ObservableCollection<YourDataType>(GetData());

如果您不熟悉WPF中的数据绑定,请参阅MSDN上的Data Binding Overview页面...您还需要将视图的DataContext`正确设置为具有该属性的类的实例数据绑定到例如:

DataContext = new SomeViewModelWithTheBindableProperty();