这是数据绑定的方式和吸引力吗?

时间:2012-08-20 23:57:46

标签: c# winforms data-binding dynamic

好的,让我们看看我是否正在思考:

如果我只是想从源读取一些数据然后将其应用到某个控件,我也可以直接这样做,而不是去解决数据绑定问题。我,我也可以这样做:

foreach (var quad in listQH)
{
   ...
   tb.Text = quad.Ph1;

......而不是:

tb.DataBindings.Add(new Binding("Text", quad, "Ph1"));

但是,如果我希望基础类实例中的更新更新控件(在本例中为“tb”textBox),并且用户更新控件以更新这些类实例成员(“双向绑定”),我需要实现INotifyPropertyChanged。但是,我必须更改此代码:

List<QHQuad> listQH = GetForPlatypus(PlatypusId, dow); // listQH locally declared
foreach (var quad in listQH)
{
    int QHCell = quad.QH;
    if ((QHCell >= 1) || (QHCell <= QUARTER_HOUR_COUNT))
    {
        string PH1CellToPopulate = string.Format("textBoxA_{0}", QHCell);
        string PH2CellToPopulate = string.Format("textBoxB_{0}", QHCell);
        string PH3CellToPopulate = string.Format("textBoxC_{0}", QHCell);
        var tb = (TextBox)this.Contro.Find(PH1CellToPopulate, true).First();
        tb.DataBindings.Add(new Binding("Text", quad, "Ph1"));
        . . .

...为:

List<QHQuad> listQH; //global to the form
. . .
listQH = GetInfoForPlatypus(PlatypusId, dow);
foreach (var quad in listQH)
{
    // the same as above

然后我将能够以这种方式最终保存那些可能更改的类实例值:

foreach (var quad in listQH)
{
    UpdateQH(quad); // quad contains members QH, Ph1, Ph2, and Ph3 ("UPDATE BLA SET PH1 = :Ph1, PH2 = :Ph2, PH3 = :Ph3 WHERE QH = :QH")
}

1 个答案:

答案 0 :(得分:2)

你有正确的想法。不过,这里有一些指示。

只有当您希望ViewModel中的更改冒泡到视图时,才需要

INotifyPropertyChanged。双向绑定不需要它。如果你想要双向绑定并且只需要在视图加载时读取一次,那么普通属性就可以了。

您可能想要查看MVVM(模型 - 视图 - ViewModel)模式。它是WPF,Silverlight,Metro等的推荐设计模式,因为它非常适合数据绑定繁重的实现。