2012-01-27 15 views
1

私はEFとWPFを使用して顧客データを表示し、このデータを編集できるアプリケーションを作成します。 Datagridは顧客に電話番号を表示します。ListCollectionViewとDataGrid行を追加

昨日私はそれらをフィルタリングして並べ替えたいので、コレクションビューをCollectionViewSourceからListCollectionViewに変更しました。

((ISupportInitialize)mycollection).BeginInit(); 
    mycollection.CollectionViewType = typeof(ListCollectionView); 
    ((ISupportInitialize)mycollection).EndInit(); 

しかし、今日、私は、顧客が少なくとも1つの電話番号を持っていない場合、新しいオブジェクトを追加する行がないことに気付きました。ここでは、より良いビューのためのいくつかの画面は以下のとおりです。どちらの場合もIsEnableとIsReadOnlyので

when tel exists

when tel doesn't exists

は変更されません。何か案は?

答えて

2

コレクションが空の場合、ListCollectionViewは追加する必要のあるオブジェクトの種類を認識しません。

public static void SetTypeToListCollectionView(Type t, CollectionViewSource collectionViewSource) 
{ 
    ListCollectionView repositoryView = (ListCollectionView)collectionViewSource.View; 

    if (!repositoryView.CanAddNew) 
    { 
     ConstructorInfo ci = t.GetConstructor(new Type[] { }); 
     FieldInfo field = repositoryView.GetType().GetField("_itemConstructor", BindingFlags.Instance | BindingFlags.NonPublic); 
     field.SetValue(repositoryView, ci); 
    } 
} 

それは働いていますが、設定型の後、DataGrid.ItemsSource

私はこのような何かをしたきにCollectionViewSourceを結合する前にこれを実行する必要があります:

反射によってタイプを設定するためのソリューションがあります
BindingOperations.ClearAllBindings(dataGrid); 
BindingOperations.SetBinding(dataGrid, DataGrid.ItemsSourceProperty, new Binding() { Source = collectionViewSource }); 
+0

素晴らしいです。学ぶべきもう一つの良いこと(反映)。どうもありがとう! – devarc

関連する問題