2016-04-03 32 views
0

私はDataGridとその中にいくつかのレコードがあります。私が望むのは、キーボードのDeleteキーを押すと、行が削除され、コレクション内のレコードさえも削除されます。削除キーを使用してDataGridから行を削除する方法

私はCanUserDeleteRowsパラメータがトリックを行うと思ったが、うまくいきませんでした。私がdeleteを押すと、行は消えますが、まだコレクションに残ります。

これは私のDataGrid

<DataGrid 
    Name="ProjectsGrid" 
    ItemsSource="{Binding Path=FilesCollection}" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    CanUserDeleteRows="True"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Header="Use" Binding="{Binding Include}"/> 
     <DataGridTextColumn Header="Name" Binding="{Binding Path, Converter={StaticResource PathConverter}}"/> 
    </DataGrid.Columns> 
</DataGrid> 

これは私のViewModelです:

namespace Validator.ViewModels 
{ 
    class SettingsVm : INotifyPropertyChanged 
    { 
    public void ChangeProperty(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

    public ObservableCollection<CsprojFile> FilesCollection { get; set;} 
    public SettingsVM() 
    { 
     FilesCollection = new ObservableCollection<CsprojFile>(); 
    } 
} 

は私のViewModelにいくつかのイベントを追加する必要がありますか?それとも私が気付いていない他の方法がありますか?

ありがとうございます。

+0

あなたの問題を解決する必要があります/ [ 'のICommandのいくつかの実装を使用しています'](https://msdn.microsoft.com/en-us/library/system.windows.input.icommand(v = vs.110).aspx)interface?おそらく 'RelayCommand'の中には? – dkozl

+0

はい私は自分の実装を持っています。あなたは何を提案しますか?私の実装をここにアップロードして見せてください。 –

+0

不要です。私はなぜアイテムがあなたのコレクションに残るのか不思議です。それは私の場合と同様に削除する必要があります。あなたのコレクションが削除を許可しない場合、 'CanUserDeleteRows'オプションは無視されます。 [MSDN](https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.canuserdeleterows(v = vs.110).aspx):_ **行を削除すると、アイテムが削除されますその行はItemsSource **から表されます。 ItemsSourceが削除を許可しない場合、このプロパティがtrueに設定されていても、ユーザーは行を削除できません。 – dkozl

答えて

0

あなたのコレクションは、ビューから更新したいなら、あなたはようItemSourceのための結合様式を言及する必要があります:

<DataGrid 
    Name="ProjectsGrid" 
    ItemsSource="{Binding Path=FilesCollection, Mode=TwoWay}" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    CanUserDeleteRows="True"> 
      <DataGrid.Columns> 
       <DataGridCheckBoxColumn Header="Use" Binding="{Binding Include}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path}"/> 
      </DataGrid.Columns> 
     </DataGrid> 

これは

+0

これは2つの方法なしでも機能します。コレクション全体を変更するのではなく、アイテムを削除しています。事実、視界から消えるアイテムは、それがそのまま動作するはずです。 – dkozl