2015-01-05 2 views
0

Я вспахал вопросы и ответы других людей по этой теме весь день, но ничего не работает. Я пытаюсь связать пустой ObservableCollection с ListView, который будет заполнен, когда пользователь добавит данные. Из того, что я могу сказать в окне вывода, DataContext не показывает открытую переменную, созданную мной для привязки к ListView. Я все еще довольно новичок в WPF, поэтому, скорее всего, я что-то пропустил, но я просто этого не вижу.ListView не имеет обязательной привязки с использованием

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. Любая помощь приветствуется. Заранее спасибо.

ответ

0

Вам необходимо создать собственность и связать с этим объектом.

E.g. в вашем ViewModel:

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

затем на ваш взгляд:

ItemsSource="{Binding FieldAnalysis}" 
+0

Это было. Я не понимал, что для доступа к XAML нужны явные геттеры. Фу, я раздражен собой, сколько времени я погружаюсь в эту проблему, чтобы быть чем-то таким простым. Благодаря! –

0

Ваш класс должен быть таким:

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

Если вы не реализуете INotifyPropertyChanged на окне, вы должны создать экземпляр Observable коллекции перед вызовом InitializeComponent

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

как о добавлении " 'до

ItemsSource="{Binding Path=fieldAnalysis}" 

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

не уверен относительно это, но я думаю, что это поможет

Смежные вопросы