- この設計は避けることを強くお勧めします。ただし、実装するとコードが脆弱になり、何のメリットもありません (max と sum を集計していることは既にわかりますが、もう一度教えてください)。
- 先に進む場合は、その "Compute" TextBox を取り除きます。TextBoxes = テキストを入力します。すでにデザイン サーフェイスにあるものを言い換えているだけです。あなたが生成したテキストを私が変更することを許可しても意味がありません。TextBlock または Label を使用します。
- 繰り返しますが、これをアクティビティに保存しないでください。これはすべての UI タスクであり、この情報をアクティビティ構成に保存するべきではありません
これがあれば
public sealed class MyActivity : Activity
{
public string Compute {get;set;} // NO!
この
<!-- NO! -->
<Label>Compute</Label><TextBox Text="{Binding ModelItem.Compute}"/>
あなたはおそらくこれを間違っています。
それで、どうやってそれをしますか?
ModelItemの変更をリッスンし、毎回この文字列を作成することで、ModelItem を解析してこの文字列を生成できます。コンストラクターが呼び出されたときに ModelItem が設定されないことに注意してください。そのため、ActivityDesigner.ModelItemプロパティへの変更をリッスンする必要があります。これにはイベントがないため、DependencyProperty の変更をリッスンする方法を知っている必要があります。
ModelItem の変更をリッスンすると、変更が発生するたびに、ModelItem をたどることができます(これは難しいことです)。ModelItem からアクティビティを取得して調べることもできます。
var child = ModelItem.Properties["Child"].Value.GetCurrentValue();
if(child == null)
computeTextBox.Text = "Please add some computation stuff.";
else
// hard stuff goes here...
ユーザーが単一の MaxActivity ではなく Sequence をスローした、または 7 つのネストされた Sequence がないなどと想定できないため、Activity の子から内部に保持されているアクティビティへのパスをたどるのは危険な場合があります。 . したがって、以下に含まれるものを解析するには、かなり複雑で脆い一連のif
else
ロジックが必要です。また、ModelItem の外でアクティビティ ツリーのプロパティを変更し始めると、UI と同期しなくなります。
さて、それを読んだ後、ポイント1に戻ります。私はこの回答にリストし、私のアドバイスに従ってください。アイデアを完全にドロップします。