ViewModel:
public ObservableCollection<string> Items { get; set; } = new ObservableCollection<string>();
Items.Add("Item 1");
Items.Add("Item 2");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
Items.Add("Item 3");
View:
<ListView ItemsSource="{Binding Items}">
<ListView.ItemsPanel >
<ItemsPanelTemplate>
<UniformGrid Columns="3" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>