[英]C# WPF - Controlling column width of DataGrid ItemsSource items
这个问题很难解释,但我会尽力而为。 这段代码是我正在开发的网络抓取应用程序概念验证的一部分 - 最近才开始。
我正在尝试使用 DataGrid 显示 2 列数据。 我可以通过将ObservableCollection<>
分配给DataGrid.ItemsSource
(见下图)来显示数据,我遇到的问题是我无法控制列属性。 我对 WPF 很陌生,并试图“有点”采用 MVVM。
在图片中它显示了 4 列,来自 ItemsSource 的“Title”和“Price”都是 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 或任何东西也会很棒。
谢谢!
我通过绑定到我想在列中显示的对象的字段来解决这个问题。 这意味着我可以删除ScrapeProductButton_OnClick
方法中的格式。
XAML 代码在这里:
<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 Name="WebScrapedItems" AutoGenerateColumns="False">
<DataGrid.Columns >
<DataGridTextColumn Header="Title" Binding="{Binding Title}" Width="3*"/>
<DataGridTextColumn Header="Price" Binding="{Binding Price}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
我感谢人们花时间查看问题 - 如果我浪费了你的时间,抱歉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.