Mode = TwoWay,UpdateSourceTrigger = PropertyChanged还是LostFocus?

Kra*_*nys 4 c# data-binding wpf xaml datagrid

我使用Observable Collection将数据库的表绑定到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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的DataGrid:

<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>
Run Code Online (Sandbox Code Playgroud)

单向绑定运行良好,我可以看到从我的表到我的DataGrid的数据.

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

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

EDIT1:这是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" />
Run Code Online (Sandbox Code Playgroud)

She*_*dan 9

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

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

PropertyChanged:每当绑定目标属性更改时立即更新绑定源.

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

现在澄清Binding.Mode属性的使用,你应该知道它OneWayOneWayToSource值的工作方向.从ModeMSDN上的链接页面:

• 只要目标属性或源属性发生更改,TwoWay就会更新目标属性或属性.

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

OneTime仅在应用程序启动或DataContext发生更改时更新目标属性.

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

Default会导致使用target属性的默认Mode值.

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