2017-04-21 9 views
-1

私はグリッドを作成し、それを汎用のデータListで埋めることができました。例えば、Person。しかし、このリストでは、例えばMan,Womenです。グリッドに新しい行を追加するにはどうすればよいですか?私はそれをリストに保存しなければならないが、方法はわからないことを知っている。WPF - バインドリスト<Person>多型

サンプルXAML:

<dxg:GridControl SelectedItem="{Binding SelectedItem}" Name="Persons" Grid.Column="0" Grid.Row="0" AutoGenerateColumns="AddNew" EnableSmartColumnsGeneration="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding model.personList}"> 
     <dxg:GridControl.View> 
      <dxg:TableView EditFormShowMode="Dialog" AllowPerPixelScrolling="True" NewItemRowPosition="Bottom" ShowTotalSummary="false" 
          AllowEditing="True" InitNewRow="TableView_InitNewRow" ValidateRow="TableView_ValidateRow" InvalidRowException="TableView_InvalidRowException" /> 
     </dxg:GridControl.View> 
    </dxg:GridControl> 

デアPersonクラスが抽象的であり、例えば、プロパティ名のために持っています。クラスの男性と女性には、追加のプロパティがあります(たとえば)。

+0

いくつかのサンプルコードを表示できますか? – janonimus

答えて

0

あなたはObservableCollectionDataGridItemsSourceを設定したり、結合した場合、あなただけのこのコレクションにManWomanのインスタンスを追加することができます。

List<T>ObservableCollection<T>の違いは、後者は、新しい項目が追加または削除されるようにDataGridが自動的に更新されることを意味INotifyCollectionChangedインタフェースを実装することです。

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var sourceCollection = Persons.ItemsSource as ObservableCollection<Person>; 
    if (sourceCollection != null) 
    { 
     sourceCollection.Add(new Man() { Name = "..." }); 
    } 
} 
+0

しかし、タイプ・マンで新しい行を追加したいのであれば、それは人の列だけを表示するという事実のためにできません。私は、グリッドに行を挿入する "エディタ"が必要になると思います。最後のデフォルトの「空行」は機能しません。 – thomas

+0

あなたはPersonがPersonから継承し、IEnumerable にバインドしていることを確認できます。 – mm8

+0

しかし、私はそれをグリッドに追加するために女性オブジェクトが必要な場合はどうなりますか?エディターで試してみます。グリッド上の既存のオブジェクトを変更したい場合は、「空行」が機能するように見えます。 – thomas