从页面 (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
是列表中的一个项目,而不是 ListView
的 DataContext
。
我的汉堡包菜单是使用 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
是列表中的一个项目,而不是 ListView
的 DataContext
。