从页面 (WPF) 在 ListView 菜单中添加项目

Add item in ListView menu from Page (WPF)

我的汉堡包菜单是使用 ListView.This 菜单实现的 MainWindow.I 需要从 Page.When 用户点击它添加的按钮在此 ListView 中添加新项目列表视图中包含 textboxes.Here 数据的新项目是菜单代码 XAML

<ListView x:Name="ListViewMenu" Foreground="#FF5C99D6" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="ListViewMenu_SelectionChanged">
    <ListViewItem x:Name="Page1" Height="60">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Page1" VerticalAlignment="Center" Margin="20 10"/>
        </StackPanel>
    </ListViewItem>
    <ListViewItem x:Name="Page2" Height="60">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Page2" VerticalAlignment="Center" Margin="20 10"/>
        </StackPanel>
    </ListViewItem>
</ListView>

我需要添加像这样的项目 style.From 在 Frame 中打开的页面。 我有一些用于添加 item.It 的代码,但项目的名称类似于 "WPFProject.Page1+NameItem..."

((MainWindow)System.Windows.Application.Current.MainWindow).ListViewMenu.Items.Add(new NameItem((TypeHere.Text)));

您的 ListView 应该设置 ItemsSource 属性。然后,您可以使用 DataTemplate 来显示项目。您还需要某种 ViewModel 来容纳您的 collection。这会让您的生活轻松很多。

你的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 的 ItemsSource 设置为 DataContext 的 ObservableCollection。当您修改此 collection 时,ui 将更新以反映 collection.

DataTemplate 本质上是告诉 ListView 如何显示每个项目。在 DataTemplate 中,DataContext 是列表中的一个项目,而不是 ListViewDataContext