WPF ListView与ObservableCollection的绑定问题

时间:2018-08-21 11:21:53

标签: c# wpf xaml

我有一个ListView绑定到名为ObservableCollection的{​​{1}}

GunsCollection

当我在<Grid> <ListView x:Name="lstView" Height="300" ItemsSource="{Binding GunsCollection}"> <ListView.View> <GridView> <GridViewColumn Header="Gun Name" Width="120" DisplayMemberBinding="{Binding ModelName}"/> <GridViewColumn Header="Price" Width="120" DisplayMemberBinding="{Binding UnitCost}"/> </GridView> </ListView.View> </ListView> 的构造函数中创建GunsCollection的实例时,我的ListView没有显示任何内容,并且为空。

MainWindow

但是,当我在其声明的同一行上创建public partial class MainWindow : Window { public ObservableCollection<Gun> GunsCollection { get; set; } public MainWindow() { InitializeComponent(); this.DataContext = this; var GunsCollection = new ObservableCollection<Gun>() // doesn't work! { new Gun() {ModelName = "AK-47", UnitCost = 2700 }, new Gun() {ModelName = "M4A4", UnitCost = 3100 }, }; } } 的实例时,GunsCollection可以工作并显示其中包含的所有项目。

ListView

为什么会这样?

2 个答案:

答案 0 :(得分:0)

在第一个示例中,在构造函数执行后,用数据填充的 GunsCollection 将不再存在。您已经创建了一个新变量,该变量与您的class属性无关(即使它具有相同的名称)。

答案 1 :(得分:0)

显示的第一个示例是创建一个新的局部变量,而不是将其分配给绑定到视图的公共集合。

public partial class MainWindow : Window
{
    public ObservableCollection<Gun> GunsCollection { get; set; } 
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
        GunsCollection = new ObservableCollection<Gun>() 
        {
            new Gun() {ModelName = "AK-47", UnitCost = 2700 },
            new Gun() {ModelName = "M4A4", UnitCost = 3100 },
        };
    }
}

删除var