Mode=TwoWay, UpdateSourceTrigger=PropertyChanged or LostFocu

本文关键字:or LostFocu PropertyChanged TwoWay Mode UpdateSourceTrigger | 更新日期: 2023-09-27 18:20:24

>我使用可观察集合将数据库的表绑定到 DataGrid 中:

class ViewModel:INotifyPropertyChanged
{
    private BDDInterneEntities _BDDInterneEntities;
    public ViewModel()
    {
        _BDDInterneEntities = new BDDInterneEntities();
        ResultatCollection = new ObservableCollection<Resultat>(_BDDInterneEntities.Resultat);
    }         
    public ObservableCollection<Resultat> ResultatCollection { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
}

这是我的数据网格:

<DataGrid x:Name="DonneesBrutes" ItemsSource="{Binding Path=.ResultatCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="PMRQ" Width="*" Binding="{Binding Path=.TOTMPMRQ, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Header="PMRQ"></DataGridTextColumn>
        <DataGridTextColumn x:Name="LibellePMRQ" Width="*" Binding="{Binding Path=.LibelléTOTApres, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Header="Libellé PMRQ"></DataGridTextColumn>
        <DataGridTextColumn x:Name="Ligne" Width="*" Header="Ligne"></DataGridTextColumn>
        <DataGridTextColumn x:Name="OTM" Width="*" Header="OTM"></DataGridTextColumn>
        <DataGridTextColumn x:Name="TOTM" Width="*" Header="TOTM"></DataGridTextColumn>
        <DataGridTextColumn x:Name="LibelleTOTM" Width="*" Header="Libellé OTM"></DataGridTextColumn>
        <DataGridTextColumn x:Name="GA" Width="*" Header="GA"></DataGridTextColumn>
        <DataGridTextColumn x:Name="Discipline" Width="*" Header="Discipline"></DataGridTextColumn>
        <DataGridTextColumn x:Name="DisciplineSubstituee" Width="120" Header="Discipline Substituée"></DataGridTextColumn>
        <DataGridTextColumn x:Name="colonnesupp" Width="*" Header="colonne supp"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

单向绑定效果很好,我可以将表中的数据查看到我的 DataGrid 中。

我已经搜索了能够将数据从我的DataGrid发送到我的数据库的可能性,我找到了双向模式和UpdateSourceTrigger属性:http://msdn.microsoft.com/fr-fr/library/system.windows.data.binding.updatesourcetrigger(v=vs.110(.aspx

我认为执行此绑定是一个很好的解决方案,但我不确定该怎么做。UpdateSourceTrigger 最适合我的属性是 LostFocus, PropertyChanged 吗?这样做就够了吗?我的代码仅适用于 OneWay,另一种方式不起作用。

编辑1:这是app.config文件有趣的部分:

<connectionStrings>
    <add name="BDDInterneEntities" connectionString="metadata=res://*/ModelBddInterne.csdl|res://*/ModelBddInterne.ssdl|res://*/ModelBddInterne.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)'v11.0;attachdbfilename=|DataDirectory|'BDDInterne.mdf;integrated security=true;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.entityClient" />

Mode=TwoWay, UpdateSourceTrigger=PropertyChanged or LostFocu

Binding.UpdateSourceTrigger属性的使用相当简单。它会影响 UI 中所做的属性更改何时反映在代码隐藏或视图模型中的数据绑定源对象中。从 MSDN 上的"UpdateSourceTrigger枚举"页:

失去焦点

:每当绑定目标元素失去焦点时更新绑定源。

属性

已更改:每当绑定目标属性更改时,立即更新绑定源。

您选择哪一个将取决于您的要求。如果您希望在用户键入每个字符时更新 Binding s 和您可能使用的任何验证,请选择PropertyChanged值。如果希望当用户键入选项卡远离每个控件时,Binding s 和可能用于更新的任何验证,或者选择其他控件,请选择LostFocus值。

现在,为了阐明 Binding.Mode 属性的用法,您应该知道OneWayOneWayToSource值在哪个方向工作。从 MSDN 上链接的Mode页:

• 每当目标属性或

源属性发生更改时,TwoWay 都会更新目标属性或属性。

OneWay 仅在源属性更改时更新目标属性。

OneTime 仅在应用程序启动或数据上下文发生更改时更新目标属性。

OneWayToSource 在目标属性更改时更新源属性。

默认值会导致使用目标属性的默认模式值。

为了进一步阐明,此处引用的目标是 UI 控件,是设置为数据绑定数据源的数据对象。