使用WrapPanel绑定ItemsControl wpf

时间:2017-01-08 15:11:39

标签: c# asp.net wpf data-binding

我在发布此问题之前已经进行了大量搜索,但我没有找到任何合理的解决方案。

我尝试使用ItemsControl创建包含文本框的网格。 这是我的xml:

<ScrollViewer>
        <ItemsControl x:Name="grid">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding CatalogName}"></TextBlock>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </ScrollViewer>

我已将目录列表分配给grid。这是我的代码:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            GetCatalog();
        }

        async void GetCatalog()
        {
            using (var client = new ApiClientT1())
            {
                var data = await client.GetCatalogList();
                if (data.Success)
                {
                    grid.DataContext = data.Catalogs;
                }
                //TODO: Handling Errors/Exceptions
            }
        }
    }

但是我在运行程序时没有显示任何数据。 有什么不对吗?

1 个答案:

答案 0 :(得分:2)

设置ItemsControl的ItemsSource属性,而不是DataContext

grid.ItemsSource = data.Catalogs;

或设置其DataContext并绑定XAML中的ItemsSource

<ItemsControl x:Name="grid" ItemsSource="{Binding}">
    ...
</ItemsControl>

作为一个注释,调用ItemsSource&#34; grid&#34;会很奇怪。