ListView 未正确绑定使用

ListView not binding properly using

我整天都在研究其他人关于这个主题的问题和回复,但似乎没有任何效果。我试图将一个空的 ObservableCollection 绑定到一个 ListView,它将在用户添加数据时填充。从我在输出窗口中可以看出的情况来看,DataContext 没有显示我创建的用于绑定到 ListView 的 public 变量。我对 WPF 还是很陌生,所以很可能我错过了一些东西,但我只是没有看到它。

XAML:

<ListView Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Stretch" 
      ItemsSource="{Binding Path=fieldAnalysis}" 
      Name="listviewFieldAnalysis">                                          
<ListView.View>
....

CS:

public partial class MainWindow : Window
{
    public ObservableCollection<FieldSample> fieldAnalysis;
    public MainWindow()
    {
        InitializeComponent();
        fieldAnalysis = new ObservableCollection<FieldSample>();
        this.DataContext = this;
    }
...

输出窗口:

System.Windows.Data Error: 40 : BindingExpression path error: 'fieldAnalysis' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=fieldAnalysis; DataItem='MainWindow' (Name=''); target element is 'ListView' (Name='listviewFieldAnalysis'); target property is 'ItemsSource' (type 'IEnumerable')

我已经阅读了错误消息的细目,但我仍然不确定为什么 XAML 无法访问 'fieldAnalysis' 变量。任何帮助是极大的赞赏。提前致谢。

你的class应该是这样的:

  public partial class MainWindow : Window, INotifyPropertyChanged
  {
   private ObservableCollection<FieldSample>_fieldAnalysis;
   public ObservableCollection<FieldSample> fieldAnalysis
   {
    get{return _fieldAnalysis;}
    set{
        _fieldAnalysis=value;
        if (PropertyChanged != null)
            {
             PropertyChanged(this,new PropertyChangedEventArgs("fieldAnalysis"));
            }
       }
   }

   public event PropertyChangedEventHandler  PropertyChanged;

public MainWindow()
{
    InitializeComponent();
    fieldAnalysis = new ObservableCollection<FieldSample>();
    this.DataContext = this;
}

如果您不在 Window 上实现 INotifyPropertyChanged,则必须在调用 InitializeComponent

之前实例化 Observable 集合
public partial class MainWindow : Window
{
public ObservableCollection<FieldSample> fieldAnalysis;
public MainWindow()
{
    fieldAnalysis = new ObservableCollection<FieldSample>();
    InitializeComponent();
    this.DataContext = this;
}

如何在

中添加一个 ''
 ItemsSource="{Binding Path=fieldAnalysis}" 

 ItemsSource="{Binding Path='fieldAnalysis'}" 

不确定,但我认为它会有所帮助

您需要创建一个 属性 并绑定到 属性。

例如在您的视图模型中:

public ObservableCollection<FieldSample> FieldAnalysis {
   get {
      return fieldAnalysis;
   }
}

那么在你看来:

ItemsSource="{Binding FieldAnalysis}"