2016-07-20 10 views
0

からオブジェクトをデタッチし、私は私のデータグリッドのObservableCollectionのItemSourceとしてとのSelectItem、オブジェタイプBankAcountに使用します私の見る私のMVVMプロジェクトでのObservableCollection

<DataGrid x:Name="Datagrid" Style="{DynamicResource DataGridStyle}" SelectedItem="{Binding SelectedBankAccount}" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding BankAccounts}"> 

     <DataGrid.Columns> 
      <UC:DataGridEditColumn/> 
      <DataGridTextColumn Header="Code" Binding="{Binding Path=Code}" /> 
      <DataGridTextColumn Header="Libellé" Binding="{Binding Path=Wording}" /> 
      <DataGridTextColumn Header="Compte Epargne" Binding="{Converter:DisplayBoolToYesNoConverter Investment,Oui,Non}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

私は私のVM以来、私のオブジェクトを変更したときに、私はそれが私のコレクションを変更しないたいと思います...

+0

私は、Underlying modelのReadOnly(プライベートセット)としてプロパティを作成することで、あなたの要件を満たすことができます。これがあなたの要件に合致しない場合は、無視してください。 –

+0

私はそれを行うことはできません。 ユーザーがデータグリッドの行をクリックします。これは、このオブジェクトの詳細が表示されたページを表示し、有効な変更を編集できます。問題は、これらのプロパティのいずれかが変更されると、これらの変更を検証していないときにDataGridで変更されることです。 –

+0

コレクションを変更するVMのコードをさらに作成できますか? –

答えて

0

あなたの質問を改善してください。最初のコメントでは明らかになります。マスターディテールバインディングがあります:データグリッドの行を選択すると、行のフィールドがサイドパネルで編集可能になります。ユーザーが何らかの「OK」ボタンを押して編集を検証する前に、DataGridのデータを更新する必要はありません。

はこれにいくつかのアプローチがあります。

  • は、単にサイドパネルに異なるのviewmodelを使用しています。これが変更されるとSelectedBankAccountからそのプロパティを入力します。別のビューモデルのプロパティを、ユーザーが変更を検証した後、データグリッドがバインドされているプロパティにコピーします。
  • XAMLのバインディング式にUpdateSourceTrigger=Explicitを使用します。コードでデータグリッドの更新をトリガーする必要があるので、この作業を行う方法についていくつかの読書をしてください。
関連する問題