У вашего ListView
должно быть установлено свойство ItemsSource
.Затем вы можете использовать DataTemplate для отображения элементов.Вам также понадобится какой-то ViewModel
для хранения вашей коллекции.Это сделает вашу жизнь намного проще.
Ваш ViewModel
:
public class HamburgerMenuViewModel
{
public ObservableCollection<NameItem> MenuItems { get; } = new ObservableCollection<NameItem>();
}
Я также предполагаю, что ваш NameItem
выглядит примерно так:
public class NameItem
{
public string Name { get; set; }
}
Теперь у представления будет DataTemplate, который позволит вам указать только один раз, как выглядит элемент в списке:
<HamburgerMenu>
<HamburgerMenu.DataContext>
<local:HamburgerMenuViewModel></local:HamburgerMenuViewModel>
</HamburgerMenu.DataContext>
<ListView x:Name="ListViewMenu"
Foreground="#FF5C99D6"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
SelectionChanged="ListViewMenu_SelectionChanged"
ItemsSource="{MenuItems}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type NameItem}">
<StackPanel Orientation="Horizontal"
Height="60">
<TextBlock Text="{Binding Name}"
VerticalAlignment="Center"
Margin="20 10"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</HamburgerMenu>
В ListView
для ItemSource установлено значение DataContext's ObservableCollection
.когда вы изменяете эту коллекцию, пользовательский интерфейс будет обновляться, чтобы отражать коллекцию.
DataTemplate
по сути говорит ListView
, как отображать каждый элемент.Внутри DataTemplate
, DataContext
является элементом в списке, а не DataContext
из ListView
.