Вложенная привязка и макет в ListView с UniformGrid - PullRequest
0 голосов
/ 03 мая 2019

Я новичок в WPF / XAML и у меня есть некоторые проблемы с привязкой данных и макетом.Чего я пытаюсь достичь: список с одной строкой ячеек сетки (только Text и BackgroundColor) и несколько текстовых блоков.Мой XAML выглядит так:

    <Window.Resources>
    <DataTemplate x:Key="GridLayoutTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding RowData.RowColor}" />
            <TextBlock Text="{Binding RowData.RowText}" />
        </Grid>
    </DataTemplate>


    <DataTemplate x:Key="ListLayoutTemplate">
        <StackPanel VerticalAlignment="Stretch">
            <ItemsControl ItemTemplate="{StaticResource GridLayoutTemplate}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Rows="1" Columns="9"></UniformGrid>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl> 
            <Grid Background="Green">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding TileColor}" />
                <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding TileText}" />
            </Grid>
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<ListView ItemTemplate="{StaticResource ListLayoutTemplate}" Name="lvDataBinding">
</ListView>

Код позади:

public Test()
        {
            InitializeComponent();
            List<DataObject> items = new List<DataObject>();
            List<Row> rowItem = new List<Row>();
            rowItem.Add(new Row()
            {
                RowColor = "Red",
                RowText = "Text1"
            });
            rowItem.Add(new Row()
            {
                RowColor = "Blue",
                RowText = "Text2"
            });


            items.Add(new DataObject()
            {
                TileColor = "Black",
                TileText = "Blibb",
                RowData = rowItem
            });

            items.Add(new DataObject() { TileColor = "Yellow", TileText = "Blubb", RowData=rowItem });
            items.Add(new DataObject() { TileColor = "Red", TileText = "Blabb", RowData=rowItem });
            this.lvDataBinding.ItemsSource = items;
        }
    }

    public class DataObject
    {
        public string TileText { get; set; }
        public string TileColor { get; set; }
        public List<Row> RowData { get; set; }
    }

    public class Row
    {
        public string RowText { get; set; }
        public string RowColor { get; set; }
    }

Если я запускаю это, он показывает только строки для списка, а не равномерную сетку.Привязка для элемента списка в порядке, но я понятия не имею, для единой сетки макет также может быть неправильным.сбивает с толку все.

1 Ответ

1 голос
/ 03 мая 2019

Свяжите свойство ItemsSource ItemsControl с RowData и удалите «RowData».из путей привязки в GridLayoutTemplate:

<DataTemplate x:Key="GridLayoutTemplate">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding RowColor}" />
        <TextBlock Text="{Binding RowText}" />
    </Grid>
</DataTemplate>


<DataTemplate x:Key="ListLayoutTemplate">
    <StackPanel VerticalAlignment="Stretch">
        <ItemsControl ItemsSource="{Binding RowData}" ItemTemplate="{StaticResource GridLayoutTemplate}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Rows="1" Columns="9"></UniformGrid>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <Grid Background="Green">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding TileColor}" />
            <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding TileText}" />
        </Grid>
    </StackPanel>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...