我是 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),而不是行):-请指导我如何完成它,任何要引用的特定链接都会有很大帮助,我想我必须使用
MVVM
.
最佳答案
为了在运行时更新股票价格并添加新股票,Stock
应该执行INotifyPropertyChanged并使用 ObservableCollection而不是 List<Stock>
.
通过 public property 公开股票列表,从帖子中您还可以了解如何设置 DataContext
和 ItemsSource
的数据网格。这就是 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.LayoutTransform
和 DataGrid.CellStyle
旋转 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/