2015-01-05 19 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.在您的視圖模型:

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,你必須實例觀察集合調用的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'}" 

不確定它,但我認爲這將有助於