MonoTouch.Dialog: обновление текста в элементе - PullRequest
2 голосов
/ 14 декабря 2011

Используя MonoTouch.Dialog Я добавляю StyledStringElement элементов.

Существует фоновая задача, которая извлекает сведения, которые необходимо обновить element.Value

Есть ли способ заставить элемент обновлять его текст после обновления element.Value?

Ian

Ответы [ 3 ]

12 голосов
/ 14 декабря 2011

Если вы хотите обновить этот элемент за элементом, вы можете использовать что-то вроде:

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 голос
/ 28 мая 2013

Я добавил «this.PrepareCell (ячейка); к методу SetValueAndUpdate и работает. Но я все еще думаю, что есть еще одна лучшая опция, обнаруживающая изменение« заголовка »и вызывающая 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 ();
        }
}
0 голосов
/ 25 сентября 2013

Другой подход к обновлению метки заключается в получении из 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);
};
...