【发布时间】:2021-01-04 10:53:42
【问题描述】:
这个问题很难解释,但我会尽力而为。此代码是我正在开发的网络抓取应用程序的概念验证的一部分 - 只是最近才开始。
我正在尝试使用 DataGrid 显示 2 列数据。我可以通过将ObservableCollection<> 分配给DataGrid.ItemsSource 来显示数据(见下图),我遇到的问题是我无法控制列属性。我对 WPF 很陌生,并试图“有点”采用 MVVM。
在图片中它显示了 4 列,ItemsSource 中的“标题”和“价格”都是 2 个大列。
private void ScrapeProductButton_OnClick(object sender, RoutedEventArgs e)
{
string url = this.ProductToScrapeUrlTextBox.Text;
scraper.ScrapeData(url);
var entries = scraper.Entries;
WebScrapedItems.ItemsSource = entries;
WebScrapedItems.Columns.Add(new DataGridTextColumn(){Header = "Title",
Width = new DataGridLength(0.8, DataGridLengthUnitType.Star)});
WebScrapedItems.Columns.Add(new DataGridTextColumn(){Header = "Price",
Width = new DataGridLength(0.2, DataGridLengthUnitType.Star)});
}
如上面后面的代码所示,我尝试添加 2 列的正确格式,假设 ItemsSource 的内容只会做同样的事情(显然不是)。在 XAML 中关闭 AutoGeneratedColumns 不会显示 ItemsSource,但会正确显示其他列。
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Button Name="ScrapeProductButton" Grid.Column="0"
Margin="10 10 10 10" Background="AntiqueWhite"
Content="Scrape Website" FontWeight="Bold"
Click="ScrapeProductButton_OnClick"/>
<TextBox Name="ProductToScrapeUrlTextBox" Grid.Column="1"
Margin="10" Padding="2"/>
</Grid>
<DataGrid Height="350" Width="740" Margin="10" Name="WebScrapedItems"
VerticalAlignment="Center" HorizontalAlignment="Center"
RowHeight="30" ColumnWidth="390" IsReadOnly="True"
AutoGenerateColumns="True" FrozenColumnCount="2">
</DataGrid>
</StackPanel>
我的目标是只显示 ItemsSource 对象的内容,但要确保它们的格式正确。我觉得绑定可能是它无法正常工作的一个潜在原因,但我还是 WPF 的新手,还没有开始阅读它。
任何帮助将不胜感激,任何 WPF 建议、MVVM 或任何东西也将非常好。
谢谢!
【问题讨论】:
标签: c# wpf data-binding datagrid