gpt4 book ai didi

c# - WPF DataGrid 动态列绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 10:58:59 25 4
gpt4 key购买 nike

我是 WPF 新手,遇到了一个问题。我正在使用 DataGrid其中行是固定的(只有 3 行),但可以在运行时添加列。

Row 1 :- Stock Name
Row 2 :- Current Price
Row 3 :- Old Price

第 2 行和第 3 行将在 runtime 更新每一秒。我的类(class)如下:-
class Stock
{
String name;
double currentPrice;
double oldPrice;
}

class StockCollaction
{

List<Stock> list = new List<Stock>();

public void addStock(Stock stock)
{
list.add(stock);
}

public void update()
{
....
}
.....
}

我要创建 DataGrid如下所示(每列需要与模型绑定(bind),而不是行):-

Data Grid

请指导我如何完成它,任何要引用的特定链接都会有很大帮助,我想我必须使用 MVVM .

最佳答案

为了在运行时更新股票价格并添加新股票,Stock应该执行INotifyPropertyChanged并使用 ObservableCollection而不是 List<Stock> .

通过 public property 公开股票列表,从帖子中您还可以了解如何设置 DataContextItemsSource的数据网格。这就是 StockCollection class好像

public class StockCollection
{
private ObservableCollection<Stock> stocks;
public ObservableCollection<Stock> Stocks
{
get
{
return stocks;
}
}
//...add(), update() and other methods/properties
}

现在是 XAML 代码。

使用内置 DataGrid您添加新行,而不是股票的新列。您可以找到第三者 DataGrid支持倒轴,正如 Mike 在他的评论中建议的那样,或者 - 这是学习 WPF 的一个有趣部分 - 你通过应用 RotateTransform 来旋转 DataGrid .

在我的代码示例中,我定义了 2 个 DataGrid,一个是正常的,一个是旋转 90 度的。代码修改自 another post .你需要玩 DataGrid.ColumnHeaderStyle , DataGrid.LayoutTransformDataGrid.CellStyle旋转 DataGrid。

rotated DataGrid
<StackPanel Margin="100">
<DataGrid x:Name="dataGrid1" Width="200" Height="120" AutoGenerateColumns="False"
ItemsSource="{Binding Stocks}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden">
<DataGrid.Columns>
<DataGridTextColumn Header="Old Price" Binding="{Binding Path=OldPrice}"/>
<DataGridTextColumn Header="Current Price" Binding="{Binding Path=CurrentPrice}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
<Grid Height="100"></Grid>
<DataGrid x:Name="dataGrid2" Width="100" Height="500" AutoGenerateColumns="False"
ItemsSource="{Binding Stocks}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform Angle="90"/>
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="120"/>
<Setter Property="Height" Value="30"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="-90"/>
</TransformGroup>
</DataGrid.LayoutTransform>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform Angle="90"/>
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="120"/>
<Setter Property="Height" Value="30"/>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Old Price" Binding="{Binding OldPrice}" />
<DataGridTextColumn Header="Current Price" Binding="{Binding CurrentPrice}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>

关于c# - WPF DataGrid 动态列绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com