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

C# 从页面在ListView菜单中添加项(WPF),c#,wpf,listview,menu,add,C#,Wpf,Listview,Menu,Add,我有一个汉堡包菜单,它是用ListView实现的。这个菜单在我的主窗口上。我需要从页面在这个ListView中添加新项目。当用户点击按钮时,它会在ListView中添加新项目,其中包含来自文本框的数据。下面是菜单代码 XAML 您的ListView应该设置其ItemsSource属性。然后,您可以使用DataTemplate来显示项目。您还需要某种ViewModel来保存您的收藏。这会让你的生活变得更轻松 您的视图模型: public class HamburgerMenuViewModel {

我有一个汉堡包菜单,它是用ListView实现的。这个菜单在我的主窗口上。我需要从页面在这个ListView中添加新项目。当用户点击按钮时,它会在ListView中添加新项目,其中包含来自文本框的数据。下面是菜单代码 XAML


您的
ListView
应该设置其
ItemsSource
属性。然后,您可以使用DataTemplate来显示项目。您还需要某种
ViewModel
来保存您的收藏。这会让你的生活变得更轻松

您的
视图模型

public class HamburgerMenuViewModel
{
    public ObservableCollection<NameItem> MenuItems { get; } = new ObservableCollection<NameItem>();
}
视图现在将有一个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>

列表视图
将ItemsSource设置为DataContext的
ObservableCollection
。修改此集合时,ui将更新以反映集合


DataTemplate
本质上是告诉
ListView
如何显示每个项目。在
DataTemplate
中,
DataContext
是列表中的一项,而不是
ListView的
DataContext
,谢谢您的回复。我是WPF新手(我正在尝试将程序从WinForms重写为WPF)。你能解释一下标签是从哪里来的吗?(对不起,我的英语)。如果它是某个框架,我就不使用框架来实现菜单。@Ricarnev这只是我扔进去的一个标记,但是把
DataContext
放在
ListView
的父项上。
public class HamburgerMenuViewModel
{
    public ObservableCollection<NameItem> MenuItems { get; } = new ObservableCollection<NameItem>();
}
public class NameItem
{
    public string Name { get; set; }
}
<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>