我使用Observable Collection将数据库中的表绑定到DataGrid上:
这是我的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发送到数据库的可能性,发现了双向绑定模式和UpdateSourceTrigger属性:http://msdn.microsoft.com/fr-fr/library/system.windows.data.binding.updatesourcetrigger(v=vs.110).aspx
我认为这是一种很好的解决方案来执行此绑定,但我不确定该怎么做。对于我来说,UpdateSourceTrigger最好的属性是LostFocus还是PropertyChanged?仅仅这样就够了吗?我的代码只能进行单向绑定,另一种方式无法运行。
编辑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="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\BDDInterne.mdf;integrated security=true;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.entityClient" />
UpdateSourceTrigger=PropertyChanged
,如果它不会占用太多CPU,并且Mode=TwoWay
听起来像是OneWay和OneWayToSource的混合。我现在会尝试一下。 - Kraenys<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" Binding="{Binding Path=.TOTMPMRQ, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
- KraenysResultat
类是否实现了INotifyPropertyChanged
接口? - SheridanINotifyPropertyChanged
接口,但是我觉得Resultat没有实现。我要检查一下。 - Kraenyspublic partial class Resultat:INotifyPropertyChanged
,并且在添加了using System.CompomentModel
后出现了两个错误:应用程序配置文件中找不到名为 BDDInterneEntities 的连接字符串
,我将使用 app.config 进行编辑。另一个错误是WpfApplication3.Resultat doesn't implement interface member "System.CompomentModel.INotifyPropertyChanged.PropertyChanged
,通过在 Resultat 类中添加public event PropertyChangedEventHandler PropertyChanged
解决了该问题。 - Kraenys