【发布时间】:2017-05-07 23:04:34
【问题描述】:
我已按照here 的指示进行操作。尽管如此,我的绑定似乎失败了,因为我的窗口中没有结果。我想要做的只是将列表项绑定到 ListView。 XAML 文件内容:
<Window x:Class="IV_sem___PwSG___WPF_task1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:IV_sem___PwSG___WPF_task1"
mc:Ignorable="d"
Title="MainWindow" Height="600" Width="800"
MinHeight="500" MinWidth="500">
<Window.Resources>
<DataTemplate x:Key="MyItemTemplate">
<Grid Margin="5" Background="Aqua">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" Grid.Column="0" Grid.Row="0"
FontSize="18" FontFamily="Arial"></TextBlock>
<TextBlock Text="{Binding Description}" Grid.Column="0" Grid.Row="1"
FontSize="14" FontFamily="Arial"></TextBlock>
<TextBlock Text="{Binding Category}" Grid.Column="0" Grid.Row="2"
FontSize="12" FontFamily="Arial"></TextBlock>
<TextBlock Text="{Binding Price}" Grid.Column="1" Grid.RowSpan="1"></TextBlock>
<Button Content="Add to cart" Grid.Column="2" Grid.Row="1"/>
</Grid>
</DataTemplate>
</Window.Resources>
<!--<Window.DataContext>
<local:MainWindow />
</Window.DataContext>-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Menu Grid.Column="0" Grid.Row="0">
<MenuItem Header="File">
<MenuItem Header="Load"/>
<MenuItem Header="Save"/>
<Separator/>
<MenuItem Header="Exit" Click="ExitMenuItem_Click"/>
</MenuItem>
<MenuItem Header="Products">
<MenuItem Header="Add products" Click="AddProductMenuItem_Click"/>
<MenuItem Header="Clear products"/>
</MenuItem>
<MenuItem Header="About" Click="AboutMenuItem_Click"/>
</Menu>
<TabControl Grid.Column="0" Grid.Row="1">
<TabItem Header="Shop">
<!--<Grid>-->
<ListView ItemsSource="{Binding itemList}"
ItemTemplate="{StaticResource MyItemTemplate}"/>
<!--</Grid>-->
</TabItem>
<TabItem Header="Warehouse">
</TabItem>
</TabControl>
</Grid>
.cs文件内容:
namespace IV_sem___PwSG___WPF_task1{
public partial class MainWindow : Window
{
public List<Item> itemList { get; set; }
public MainWindow()
{
itemList = new List<Item>();
InitializeComponent();
}
private void AboutMenuItem_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("This is simple shop manager.", "About application", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void ExitMenuItem_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
public class Item
{
string Name { get; set; }
string Description { get; set; }
Category Category { get; set; }
double Price { get; set; }
public Item(string a, string b, Category c, double d)
{
Name = a; Description = b; Category = c; Price = d;
}
}
private void AddProductMenuItem_Click(object sender, RoutedEventArgs e)
{
itemList.Add(new Item("Computer", "Computer's description", Category.Electronics, 2499.99));
itemList.Add(new Item("Apple", "Apple's description", Category.Food, 1.99));
itemList.Add(new Item("Computer", "Computer's description", Category.Electronics, 2499.99));
}
}
public enum Category
{
Electronics, Food
}
}
Category 是一个枚举类型。 List 是 MainWindow 类的属性。 它应该根据上面的链接工作。
【问题讨论】:
-
您绑定到 DataContext 中任何对象的属性“itemList”。项目列表在哪里?它存在吗?什么是数据上下文?或者换句话说:您的 ListView.ItemsSource 绑定的绑定源是否真的存在?
-
@elgonzo itemList 在
MainWindow()构造函数中初始化,并填充了一些元素。 DataContext 肯定是包含MainWindow类的命名空间,因为它是迄今为止我项目中唯一的命名空间。我尝试在 .cs 中将itemList分配给this.DataContext并在 XAML 中仅使用"{Binding}"而不是"{Binding itemList}"- 这无论如何都没有区别。我可以再给你一些代码吗? -
请。显示 itemList 是什么集合类型,填充它的位置和方式,以及为窗口设置 DataContext 的位置/方式。用这些信息扩展你的问题(不要试图在 cmets 中解释它......)
-
我是否忽略了它,但是您在哪里为您的窗口设置 DataContext?我看到它在 XAML 中被注释掉了...
-
我刚才概述的问题场景与绑定或数据上下文无关。您的困惑可能是由于尚未习惯(我承认有些丑陋)XAML 语法。当您的程序最终评估 XAML 的这部分
<local:MainWindow/>以呈现 UI 时,它会指示您的程序创建 MainWindow 对象(即new MainWindow();)。就像<Button/>会指示您的程序创建一个 Button 对象...