使用MonoTouch.Dialog
我添加StyledStringElement
元素。
有一个后台任务可以检索需要更新element.Value
有没有办法强制元素在element.Value
更新后更新文本?
伊恩
答案 0 :(得分:12)
如果你想逐个元素地更新这个元素,你可以使用类似的东西:
public class MyStyledStringElement {
public void SetValueAndUpdate (string value)
{
Value = value;
if (GetContainerTableView () != null) {
var root = GetImmediateRootElement ();
root.Reload (this, UITableViewRowAnimation.Fade);
}
}
}
一种变体是加载所有内容并更新一次(即每root.Reload
次迭代Element
)。
答案 1 :(得分:1)
我已经将“this.PrepareCell(cell);添加到SetValueAndUpdate方法并且正常工作。但我还在想,还有另一个更好的选择来检测”caption“的变化并调用this.PrepareCell(cell);.
public void UpdateCaption(string caption) {
this.Caption = caption;
Console.WriteLine ("actualizando : " + Caption);
UITableViewCell cell = this.GetActiveCell ();
if (cell != null) {
this.PrepareCell (cell);
cell.SetNeedsLayout ();
}
}
答案 2 :(得分:0)
更新标签的另一种方法是从StyledStringElement
或StringElement
派生并直接刷新单元格中的DetailTextLabel:
class UpdateableStringElement : StringElement
{
public UpdateableStringElement(string name): base (name)
{
}
UILabel DetailText = null;
public void UpdateValue(string text)
{
Value = text;
if (DetailText != null)
DetailText.Text = text;
}
public override UITableViewCell GetCell(UITableView tv)
{
var cell = base.GetCell(tv);
DetailText = cell.DetailTextLabel;
return cell;
}
}
您可以使用Value
方法代替UpdateValue
属性:
var element = new UpdateableStringElement("demo");
SomeEventOfYours += delegate {
element.UpdateValue(LocalizedValue);
};