我使用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;
}
这是我的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>
单向绑定效果很好,我可以看到从我的表到我的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="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\BDDInterne.mdf;integrated security=true;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.entityClient" />
答案 0 :(得分:9)
使用Binding.UpdateSourceTrigger
属性非常简单。它会影响在UI中进行的属性更改何时反映在代码隐藏或视图模型中的数据绑定源对象中。来自MSDN上的UpdateSourceTrigger
Enumeration页:
LostFocus :每当绑定目标元素失去焦点时,都会更新绑定源。
PropertyChanged :每当绑定目标属性发生更改时立即更新绑定源。
您选择哪一个取决于您的要求。如果您希望在用户键入每个字符时Binding
和您可能使用的任何验证更新,请选择PropertyChanged
值。如果您希望Binding
和您可能使用的任何验证在用户从每个控件中键入选项卡时更新,或者选择其他控件,则选择LostFocus
值。
现在为了澄清Binding.Mode
Property的使用,您应该了解OneWay
和OneWayToSource
值的工作方向。来自MSDN上的链接Mode
页面:
• TwoWay 只要目标属性或源属性发生更改,就会更新目标属性或属性。
• OneWay 仅在源属性更改时更新目标属性。
• OneTime 仅在应用程序启动或DataContext发生更改时更新目标属性。
• OneWayToSource 在目标属性更改时更新源属性。
•默认会导致使用目标属性的默认模式值。
为了进一步说明,此处引用的目标是UI控件,源是设置为数据绑定数据源的数据对象。< / p>