我有一个按钮,单击该按钮将在SQL Server上运行存储过程,并在同一窗口的网格中显示结果数据。
在Windows窗体世界中,我创建一个数据表,使用dataadapter填充它,然后将数据表分配给我的DataGridView的数据源属性和poof ...这是我的数据。
我在使用带有Gridview的ListView尝试了类似的WPF,我似乎无法使其工作。我的XAML中有以下内容:
<ListView Grid.Row="1" Name="Preview" ItemsSource="{Binding Path=Report}">
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=FormalName}" />
</GridView>
</ListView>
<ListView Grid.Row="1" Name="Preview" ItemsSource="{Binding Path=Report}">
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=FormalName}" />
</GridView>
</ListView>
在我的C#代码中
当我点击按钮(触发CreateReport方法)时,我的数据表被填充并分配给Datacontext,但没有显示任何内容。
答案 0 :(得分:6)
我制作了一个示例应用程序并发现您需要使用ListView.View包围GridView并将ItemsSource设置为{Binding},如下所示:
<ListView Name="Preview" ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=FormalName}" />
</GridView>
</ListView.View>
</ListView>
答案 1 :(得分:1)
我认为部分问题是你还在考虑WinForms。而不是将Grid绑定到Table,如何将ListBox绑定到Collection?
请改为尝试:
1)创建另一个实现INotifyPropertyChanged的类。我们将把这个类用于DataContext。把它想象成你的BindingEngine。我通常将它作为Window本身的DataContext,使其可以在Window中的任何位置使用。
2)在一个ObservableCollection的新类中公开一个属性,其中YourType是另一个实现INotifyPropertyChanged的类,并公开你想要显示的数据属性。
3)在Engine中创建一个填充Collection的方法。然后在填充PropertyChanged事件时触发它。
4)将ListBox ItemsSource绑定到Property。
5)创建一个ItemTemplate并使用YourType中的属性名称进行绑定。
这是伪代码,但应该让你关闭:
<Window>
<Window.Resources>
<ObjectDataProvider x:Key="MyEngineDS" ObjectType="{x:Type MyEngine:MyEngineNamespace}" d:IsDataSource="True"/>
<DataTemplate x:Key="ItemTemplate1">
<TextBlock Text="{Binding MyPropertyName}" />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<Binding Mode="OneWay" Source="{StaticResource MyEngineDS}"/>
</Window.DataContext>
<Grid x:Name="LayoutRoot">
<ListBox ItemsSource="MyCollection" ItemTemplate="{DynamicResource ItemTemplate1}" />
</Grid>
</Window>
希望这有帮助。
答案 2 :(得分:0)
请尝试使用ItemsSource =“{Binding}”。