WPF и массив данных - PullRequest
       0

WPF и массив данных

0 голосов
/ 09 ноября 2018

Я пытаюсь разработать что-то, что - с WinForms - было бы общеизвестным "куском пирога". Динамический набор связанных данных. Это инициализирует при запуске приложения. Иногда нужен один, иногда пять. Сначала это выглядело слишком много для XAML. Так что я борюсь с этим с обычным C #. что - с WPF - безумно недружелюбно, и я снова и снова бьюсь об стену.

Или я все делаю неправильно? Есть ли правильный способ ... "продублировать" / "клонировать" одну сетку данных, разработанную и закрытую с помощью XAML, и повторно использовать эти клоны в качестве динамического массива? Всякий раз, когда я ищу решение все большего и большего количества препятствий WPF (то есть чего-то такого простого (с WinForms), как динамическое окрашивание строк), я иногда нахожу решения XAML. Простые решения кода встречаются крайне редко. даже если попытаться «перевести» XAML в обычный код, я пропускаю множество свойств / методов (или, может быть, они названы по-другому). в любом случае - как будто люди в наши дни полностью обращаются к XAML. Массивы более сложных элементов управления встречаются редко? Я нашел несколько примеров массива кнопок, привязанных к некоторой таблице. и это в значительной степени это. к тому же он никогда не работал для массива данных ...

1 Ответ

0 голосов
/ 09 ноября 2018

Это всего лишь прототип того, как связывание может давать быстрые результаты при минимальном написании кода.

<Window x:Class="testtestz.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ItemsControl ItemsSource="{Binding GridViews}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ListView ItemsSource="{Binding Data}" BorderBrush="Gray" BorderThickness="1" Margin="5">
                        <ListView.View>
                            <GridView>
                                <GridViewColumn DisplayMemberBinding="{Binding Id}" Header="Id"/>
                                <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/>
                            </GridView>
                        </ListView.View>
                    </ListView>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>

Это код позади.

using System.Collections.Generic;
using System.Windows;

namespace testtestz
{ 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<object> myData = new List<object>()
            {
                new { Id = 1, Name = "John" },
                new { Id = 2, Name = "Mary" },
                new { Id = 3, Name = "Anna" },
            };

            GridViews.Add(new MyGrid { Data = myData});
            GridViews.Add(new MyGrid { Data = myData });
            GridViews.Add(new MyGrid { Data = myData });

            DataContext = this;
        }

        public List<MyGrid> GridViews { get; } = new List<MyGrid>();
    }

    public class MyGrid
    {
        public IEnumerable<object> Data { get; set; }
    }
}

Имейте в виду, что вы можете связывать практически все, что вам нравится, поэтому класс MyGrid вполне может иметь все свойства, необходимые для создания этих сеток. Так, например, у вас могут быть определения столбцов, такие как текст заголовка, ширина столбца и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...