如何使用一种方法在网格 C# WPF 中添加行 [重复]

Posted

技术标签:

【中文标题】如何使用一种方法在网格 C# WPF 中添加行 [重复]【英文标题】:How to use a method to add rows in a grid C# WPF [duplicate] 【发布时间】:2021-07-23 04:03:49 【问题描述】:

我是 WPF 和 C# 编码的新手。我正在尝试拆分 8000 个字节并每行显示 32 个字节。我编写了一个 SPLITLIST 方法,但不知道如何将它连接到我的 dataGrid 并创建 250(8000 字节/32 字节)单独的行。下面是我的方法:

 
public partial class DataInHex : Window
    
        CalibrationHexDataDTO _calibrationHExDataDTO = new CalibrationHexDataDTO();
       
        const int SPLIT_SIZE = 32; //Size of the data in row
        public DataInHex(CalibrationHexDataDTO calibrationHexDataDTO)
        
            InitializeComponent();
            this._calibrationHExDataDTO = calibrationHexDataDTO;
            dataInHexGrid.DataContext = calibrationHexDataDTO; //Here I get 8000 bytes of data

            SplitList();
        
        public void SplitList() //Split the 8k bytes to 32 bytes per row
        
            var list = new List<byte[]>();

            for (int i = 0; i < _calibrationHExDataDTO.Data.Length; i += SPLIT_SIZE)
            
                byte[] splited = new byte[SPLIT_SIZE];
                // Array.Copy(_calibrationViewDTOs.Data,i,splited,0,SPLIT_SIZE);

                Buffer.BlockCopy(_calibrationHExDataDTO.Data, i, splited, 0, SPLIT_SIZE);
                list.Add(splited);
                
            
       
        
    

【问题讨论】:

【参考方案1】:

您可以将数据绑定到集合。为此,首先创建一个包含您的数据的类。据我了解您的要求,您只想以字符串格式每行显示一个项目(大小为 32 个字节)。

public class dataset

    private string _dataline;
    public dataset(string _data)
    
        _dataline = _data;
    

    public string DataLine
    
        get return _dataline;
        set _dataline = value;
    

接下来使用 System.Collections 命名空间定义一个 ObservableCollection 来维护您的数据。这将是一个依赖属性。

public ObservableCollection<dataset> DataLines

    getreturn (ObservableCollection<DataLine>) GetValue(DataLineProperty);
    set setValue(DataLinesProperty, value);

请注意,“DataLine”类是 ObservableCollection 的数据类型。使用 DataLines 名称访问集合本身。 接下来用数据填充您的 DataLines 集合。为了简化写作,我只是将你的 byte[] 放入一个字符串数组中

dataset ds;
string[] eightKbytes;           // this is your data
DataLines = new ObservableCollection<dataset>;
for( int i = 0; i < 250; i++)

    ds = new dataset(eightKbytes[i]);
    DataLines.Add(ds);

eightkGrid.ItemsSource = DataLines;   // Set the items source here

在 XAML 中定义 DataGrid

<DataGrid :x:Name="eightkGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="My 32 ByteChunks", Binding="Binding DataLine"/>
    </DataGrid.Columns>
</DataGrid>

希望能满足你的要求。

【讨论】:

以上是关于如何使用一种方法在网格 C# WPF 中添加行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF后台动态添加控件(经典)

WPF C# 如何在动态添加的grid控件中添加某个网格中的image控件的单击事件?

WPF C#,如何将数据从数据网格添加到数据库

调整一个行高时如何设置wpf数据网格的所有行高

如何在 Datagrid WPF c# 中添加复选框

WPF 数据网格性能