C# 嵌套绑定&;具有UniformGrid的ListView中的布局

C# 嵌套绑定&;具有UniformGrid的ListView中的布局,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我是WPF/XAML新手,在数据绑定和布局方面有一些不错的问题。 我努力实现的目标: 包含一行网格单元(仅包含文本和背景色)和一些文本块下方的列表。我的XAML如下所示: <Window.Resources> <DataTemplate x:Key="GridLayoutTemplate"> <Grid> <Grid.ColumnDefinitions> <

我是WPF/XAML新手,在数据绑定和布局方面有一些不错的问题。 我努力实现的目标: 包含一行网格单元(仅包含文本和背景色)和一些文本块下方的列表。我的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; }
    }
公共测试()
{
初始化组件();
列表项=新列表();
List rowItem=新列表();
添加(新行()
{
RowColor=“红色”,
RowText=“Text1”
});
添加(新行()
{
RowColor=“蓝色”,
RowText=“Text2”
});
items.Add(新数据对象()
{
TileColor=“黑色”,
TileText=“Blibb”,
RowData=rowItem
});
添加(newdataobject(){TileColor=“Yellow”,TileText=“Blubb”,RowData=rowItem});
添加(newdataobject(){TileColor=“Red”,TileText=“Blabb”,RowData=rowditem});
this.lvDataBinding.ItemsSource=项目;
}
}
公共类数据对象
{
公共字符串TileText{get;set;}
公共字符串TileColor{get;set;}
公共列表行数据{get;set;}
}
公共类行
{
公共字符串RowText{get;set;}
公共字符串RowColor{get;set;}
}
如果我运行此命令,它只显示listview的行,而不显示uniformgrid。
listview项的绑定是可以的,但是我不知道uniformgrid,布局也可能是错误的。一点也不清楚

ItemsControl
ItemsSource
属性绑定到
RowData
,并从
GridLayoutTemplate中的绑定路径中删除“RowData.”

<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>