2010-12-06 108 views
5

我使用了一個標準的.NET的DataGrid這樣的:棱鏡/ MVVM:綁定列到DataGrid中

<DataGrid ItemsSource="{Binding Datensaetze}" AutoGenerateColumns="False"> 
<DataGrid.Columns> 
    <DataGridTextColumn Header="my col 1" Binding="{Binding MyCol1}"/> 
    <DataGridTextColumn Header="my col 2" Binding="{Binding MyCol2}"/> 
    <DataGridTextColumn Header="my col 3" Binding="{Binding MyCol3}"/> 
</DataGrid.Columns> 
</DataGrid> 

這是工作很好。現在我想定義ViewModel中的列,而不是在xaml中設置固定列,我想在運行中生成它們。但是,如果我嘗試將列與任何東西綁定,則會出現錯誤,並說

DataGrid.Columns是隻讀屬性,無法綁定。

有沒有辦法將DataGrid列動態綁定到代碼背後的東西?

回答

9

是的,Columns屬性是ReadOnly,所以我們不能直接綁定它。如果你想綁定列,那麼你可以嘗試使用你綁定的附加屬性,然後更新列。

更新
使用的CollectionChanged事件變化的增量。

然後你可以BindableColumns屬性綁定到你的ColumnsCollection

<DataGrid AutoGenerateColumns="False" 
      local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}"> 
    <!-- ... --> 
</DataGrid> 
+0

我一直在使用這很好,但我碰到的,我需要更新在後臺線程中的ObservableCollection問題(我使用Dispatcher來做到這一點)。上面的代碼然後在CollectionChanged委託中出現錯誤「調用線程無法訪問此對象,因爲不同的線程擁有它」。任何建議我可以做什麼? – 2013-01-30 15:55:46