2013-08-16 60 views
0

我創建了一個MvxTableViewCell子類,我打算在應用程序的許多位置重用,所以我想將綁定任務委託給單元的創建者。MvvmCross:從外部綁定MvxTableViewCell

到目前爲止,我基於N+1 tutorial的一些例子得到了這個工作,主要是this code from N=17-Collect a Bull part 3教程。

在這一點上

所以,創造一個細胞看起來是這樣的:

return new SubtitleCell("TitleText Name; SubtitleText Subject.Descripcion")) 

但我真的不喜歡在字符串中定義的綁定,因爲我平時重構了很多,這可能會導致在不久的將來煩惱,所以我決定宣佈像這樣一個正常的綁定視圖綁定:

var cell = new SubtitleCell(); 
var set = cell.CreateBindingSet<SubtitleCell, SubjectGroup>(); 
set.Bind().For(c => c.TitleText).To(g => g.Name); 
set.Bind().For(c => c.SubtitleText).To(g => g.Subject.Descripcion); 
set.Apply(); 
return cell; 

現在,這就像以前,現在是重構安全的,但它的代碼,我有過六次線和結合必須在單元實例已經創建時定義特德。

我認爲可以使用MvxBindingDescription來完成,因爲第一個示例中使用的綁定文本被解析爲IEnumerable<MvxBindingDescription>,但我無法找到有關它的示例或文檔。

任何人都可以指向正確的方向嗎?

謝謝。

編輯: 控制線是不是我最關心的,但具有限定結合之前實例化每一個單元,我很高興能有這樣的事情:

var set = Mvx.CreateBindingSet<SubtitleCell, SubjectGroup>(); 
set.Bind().For(c => c.TitleText).To(g => g.Name); 
set.Bind().For(c => c.SubtitleText).To(g => g.Subject.Descripcion); 

所以我能夠把它後來可能是這樣的:

var cell = new SubtitleCell(); 
cell.ApplyBindingSet(set); 

有沒有什麼可以做到這樣移動?

UPDATE: 只注意到第二結合例子填滿我的日誌控制檯與此錯誤:

MvxBind:Warning: 0.40 Unable to bind: source property source not found 
Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken on null-object

兩個樣本似乎產生相同的行爲,但警告錯誤只能用流利的結合出現。

回答

1

MvxBindingDescription不會真的幫助重構 - 它只是在文本或流利綁定之上運行,並且低於綁定引擎的反射級別。

如果你想Expression基於對重構結合,那麼你必須用流利的結合,並支付額外的代碼行的罰款(如果你認爲這是一個點球)

+0

感謝您的答覆斯圖爾特,請參閱我的編輯更多細節。 – redent84