DVC を既に設定した後に設定すると、UI で更新する StringElement の「値」を取得しようとしています。
例えば:
public partial class TestDialog : DialogViewController
{
public TestDialog() : base (UITableViewStyle.Grouped, null)
{
var stringElement = new StringElement("Hola");
stringElement.Value = "0 Taps";
int tapCount = 0;
stringElement.Tapped += () => stringElement.Value = ++tapCount + " Taps";
Root = new RootElement("TestDialog")
{
new Section("First Section")
{
stringElement,
},
};
}
}
ただし、StringElement.Value は単なるパブリック フィールドであり、Element.GetCell が呼び出されたときの初期化中に UICell にのみ書き込まれます。
UICellを更新するためのセッターのロジックを備えたプロパティではないのはなぜですか(大部分の要素、たとえばEntryElement.Valueなど):
public string Value
{
get { return val; }
set
{
val = value;
if (entry != null)
entry.Text = value;
}
}
編集:
私はStringElement
、から派生した独自のバージョンを作成しました(基本的に、ここからソースコードをElement
そのままコピーしただけです)
GetCell
次に、関数スコープではなく、 で作成されたセルへのクラス スコープ参照を取るように変更しました。次に、Value
フィールドをプロパティに変更しました。
public string Value
{
get { return val; }
set
{
val = value;
if (cell != null)
{
// (The below is copied direct from GetCell)
// The check is needed because the cell might have been recycled.
if (cell.DetailTextLabel != null)
cell.DetailTextLabel.Text = Value == null ? "" : Value;
}
}
}
初期テストで動作します。ただし、セルへの参照が許可されているかどうかはわかりません。他の要素はそれを行っていないようです(セル内に配置されたコントロールへの参照のみを取得します)。MonoTouch.Dialog.Element
1 つのインスタンスに基づいて複数の「ライブ」* セルが作成される可能性はありますか?
*ライブとは、セルが現在アクティブな UI の一部であることを示します。子ダイアログからダイアログに戻ると、GetCell メソッドが再度呼び出され、要素に基づいて新しいセルが作成されることに気付きましたが、要素とライブ セルの間はまだ 1-1 です。