【发布时间】:2015-06-02 01:00:28
【问题描述】:
我正在使用 MvvmCross 开发一个应用程序,它使用故事板作为 UI。我没有使用 XIB 文件作为表格单元格,而是尝试从情节提要中创建单元格。故事板生成单元格的类,然后在我绑定到我的模型的那个类中。正在创建单元格,但在绑定到单元格中的每个标签时出现以下错误,其中“MyStringProperty”是我尝试绑定到的属性的名称(名称、电话号码或电子邮件):
Failed to create target binding for binding Text MyStringProperty
表格的创建方式与 Stuart 的 Kitten Cell 教程中的相同,除了我使用以下代码行代替 XIB 来表示使用生成的单元格类:
tableView.RegisterClassForCellReuse(typeof(MyCell), MyCell.Key);
单元格中数据的绑定也是按照 Stuart 的 Kitten Cell 教程中的方式完成的。
这是 MyCell 的代码
public partial class MyCell : MvxTableViewCell
{
public static readonly NSString Key = new NSString("MyCell");
public MyCell(IntPtr handle) : base(handle)
{
this.DelayBind(() =>
{
var set = this.CreateBindingSet<MyCell, ContactModel>();
set.Bind(myLabelOne).To(contact => contact.Name);
set.Bind(myLabelTwo).To(contact => contact.PhoneNumber);
set.Bind(myLabelThree).To(contact => contact.Email);
set.Apply();
});
}
}
设计师:
[Register ("MyCell")]
partial class MyCell
{
[Outlet]
MonoTouch.UIKit.UILabel myLabelOne{ get; set; }
[Outlet]
MonoTouch.UIKit.UILabel myLabelTwo{ get; set; }
[Outlet]
MonoTouch.UIKit.UILabel myLabelThree{ get; set; }
void ReleaseDesignerOutlets ()
{
if (myLabelOne!= null) {
myLabelOne.Dispose ();
myLabelOne= null;
}
if (myLabelTwo!= null) {
myLabelTwo.Dispose ();
myLabelTwo= null;
}
if (myLabelThree!= null) {
myLabelThree.Dispose ();
myLabelThree= null;
}
}
}
【问题讨论】:
-
您是否按照 Stuart 的建议实现了此功能:stackoverflow.com/questions/16322879/…?一般来说,故事板不太适合 Mvvm 模式。我会坚持使用单独的 xib 文件,让您的视图模型处理所有导航。
-
@PkL728 视图模型正在处理导航。故事板仅包含视图的 UI,没有转场。 Stuart 在这里以更积极的方式绘制故事板:stackoverflow.com/questions/22126929/… 所使用的技术是他的第二个建议。
-
您的主要问题可能与 XCode 有关。您的“myLabelName”是否正确暴露?您可以发布 MyCell 类的代码吗?
-
@PkL728 我已经为 MyCell 添加了代码。另外,我在“myLabelName”上犯了一个错误,它应该是“MyStringProperty”,它基本上是一个类中的公共字符串。所以“MyStringProperty”可以是姓名、电话号码或电子邮件中的任何一种。绑定时都会出现错误信息。
-
你也可以发布你的 MyCell.designer.cs 吗?我在想也许奥特莱斯可能没有设置好?您的设置看起来与我正在运行的项目之一没有什么不同...