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}"
我整天都在研究其他人关于这个主题的问题和回复,但似乎没有任何效果。我试图将一个空的 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}"