好的,让我们看看我是否正在思考:
如果我只是想从源读取一些数据然后将其应用到某个控件,我也可以直接这样做,而不是去解决数据绑定问题。我,我也可以这样做:
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")
}
答案 0 :(得分:2)
你有正确的想法。不过,这里有一些指示。
只有当您希望ViewModel中的更改冒泡到视图时,才需要INotifyPropertyChanged。双向绑定不需要它。如果你想要双向绑定并且只需要在视图加载时读取一次,那么普通属性就可以了。
您可能想要查看MVVM(模型 - 视图 - ViewModel)模式。它是WPF,Silverlight,Metro等的推荐设计模式,因为它非常适合数据绑定繁重的实现。