返回

c#-如何从数据库自动在网格上生成用户控件?数据库中的一行作为网格上的一个usercontrol

发布时间:2022-08-30 21:39:22 357
# flask

我提前为我的英语道歉(我不是母语)。

我想了解如何从数据库中自动生成网格上的用户控件元素。因此,一个元素表示数据库中的一行。我试图坚持MVVM模式。

在下面的图片中,我给出了一个我希望它看起来如何的示例。

实例

我真的很惭愧于展示我的尝试(我是一个新手程序员),但我想不出任何更好的方法来几乎手动生成每个元素,我的代码如下所示:

public class ListGetter
{
    private readonly List _list;
    private Grid _elementGridList;
    private int _rowIndex;
    private int _lastColumn;

    public ListGetter(List list)
    {
        _list = list;
    }

    public Grid GetListGrid()
    {
        ResetPosition();

        foreach (var item in _list)
            CreateElement(item);

        return _elementGridList;
    }

    private void CreateElement(IListable el)
    {
        string labelText = el.GetLabel();
        string descText = el.GetDescription();

        TextBlock label = GenerateLabel(labelText);
        TextBlock desc = GenerateDesc(descText);

        Border elementBorder = new Border
        {
            Style = Application.Current.FindResource("ListElBorder") as Style
        };
        StackPanel btnPanel = GenerateBtns(el, elementBorder);

        StackPanel elementPanel = new StackPanel();
        elementPanel.Children.Add(label);
        elementPanel.Children.Add(desc);
        elementPanel.Children.Add(btnPanel);
        elementBorder.Child = elementPanel;

        MakeHoverElementsVisualSelection(elementBorder);

        AddElementToGrid(elementBorder);
    }

    private void ResetPosition()
    {
        _elementGridList = new Grid();
        _rowIndex = -1;
        _lastColumn = 1;

        if (_list.Count > 0)
        {
            ColumnDefinition _columnDefinition1 = new ColumnDefinition();
            ColumnDefinition _columnDefinition2 = new ColumnDefinition();
            _elementGridList.ColumnDefinitions.Add(_columnDefinition1);
            _elementGridList.ColumnDefinitions.Add(_columnDefinition2);
        }
    }

    private void AddElementToGrid(Border border)
    {
        if (_lastColumn == 1)
        {
            _lastColumn = 0;

            var row = new RowDefinition
            {
                Height = GridLength.Auto
            };
            _elementGridList.RowDefinitions.Add(row);
            _rowIndex++;
        }
        else
            _lastColumn = 1;

        Grid.SetColumn(border, _lastColumn);
        Grid.SetRow(border, _rowIndex);

        _elementGridList.Children.Add(border);
    }

    public List GetList() => _list.ToArray().ToList();
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像