【问题标题】:ListView not binding properly usingListView 没有正确绑定使用
【发布时间】:2015-01-05 19:45:42
【问题描述】:

我整天都在研究其他人关于这个主题的问题和回答,但似乎没有任何效果。我正在尝试将一个空的 ObservableCollection 绑定到一个 ListView,它将在用户添加数据时填充。从我在输出窗口中可以看出,DataContext 没有显示我创建的用于绑定到 ListView 的公共变量。我对 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”变量。任何帮助是极大的赞赏。提前致谢。

【问题讨论】:

    标签: c# wpf listview binding


    【解决方案1】:

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

    例如在您的视图模型中:

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

    那么在你看来:

    ItemsSource="{Binding FieldAnalysis}"
    

    【讨论】:

    • 就是这样。我没有意识到 XAML 可以访问需要显式的 getter。呃,我对自己陷入这个问题的时间如此简单感到恼火。谢谢!
    【解决方案2】:

    如何在
    中添加一个''

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

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

    【讨论】:

      【解决方案3】:

      你的班级应该是这样的:

        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;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 2015-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多