2013-08-24 154 views
2

我在我的WPF應用程序中使用MVVM模式。 我在我的ViewModel中有ObservableCollection記錄。綁定到收集元素的屬性

public enum RecordState 
{ 
    NotChanged, 
    Changed, 
    Added, 
    Deleted, 
    AlreadyExist 
} 
public class Record 
{ 
    public string FirstId { get; set; } 
    public RecordState State { get; set; } 
    public string CurrentId 
    { 
     get { return GetIdFromInstance(Instance); } 
    } 
    public MyStronglyTypedClass Instance { get; set; } 
} 

public class MyViewModel 
{ 
    public ObservableCollection<Record> Records; 
    // other code 
} 

在視圖中我有DataGrid。

<DataGrid ItemsSource="{Binding }" //> 

我有寫什麼(如果可能)的ItemsSource = 「{結合/ *這裏* /}」,讓Datagrid的項目改爲

Records[0].Instance 
Records[1].Instance 
Records[2].Instance 
... 
Records[Records.Count-1].Instance 
+2

爲什麼不綁定到集合? {Binding Records} –

+0

因爲Datagrid是我UserControl的一部分,所以我在我的代碼周圍使用UserControl(和DataGrid)和MyStronglyTypedClass。而MyStronglyTypedClass有很多屬性和**元素**的集合。 DataGrid的列是動態創建的(這裏是[idea](http://paulstovell.com/blog/dynamic-datagrid))2)在代碼3中綁定到**元素的列)單元格數據模板是動態選擇的在元素的類型上 –

回答

0

{Binding}意味着你的ItemsSource是該DataGrid的DataContext(可能繼承祖先元素)。 你應該做的是把你的頂級元素(Window,UserControl等)的DataContext設置到你的ViewModel類。 然後作爲加里建議:

<DataGrid ItemsSource="{Binding Records}"> 

你給有關動態元素的鏈接確實在這個問題一樣,它增加了更多的複雜元素綁定和的DataTemplates。