从ObservableCollection中分离对象

时间:2016-07-20 11:45:52

标签: wpf mvvm

在我的MVVM项目中,我使用我的Datagrid的ItemSource和ObservableCollection,而对于SelectItem,使用objet类型BankAcount:

在我的虚拟机中:

[RaisePropertyChanged]
public virtual BankAccount SelectedBankAccount { get; set; }

[RaisePropertyChanged]
public virtual ObservableCollection<BankAccount> BankAccounts { get; set; }

在我的视图中

<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改变我的对象时,我希望它不会改变我的收藏......

1 个答案:

答案 0 :(得分:0)

请改进您的问题,在您第一次评论时,它变得清晰:您有一个主细节绑定:当您在数据网格中选择一行时,该行的字段在侧面板中变得可编辑。您不希望在用户通过按某种“确定”按钮验证编辑之前更新de datagrid中的数据。

有几种方法:

  • 只需为侧面板使用不同的视图模型即可。当此更改时,从SelectedBankAccount填充其属性。一旦用户验证了他的更改,就将单独的viewmodel的属性复制回datagrid绑定的属性。
  • 在XAML的Binding表达式中使用UpdateSourceTrigger=Explicit。做一些关于如何使这项工作的阅读,因为你现在必须在代码中触发对数据网格的更新。