アクティビティにあるデータグリッドにコンボ ボックスがあります。コンボボックスの選択に基づいて、別のグリッドにプログラムでコントロールを設定します。ユーザーは、これらのコントロールにデータを入力して保存します。コンボ ボックスがバインドされているオブジェクトには多くのプロパティがあり、そのうちの 2 つが選択された値のパスと表示メンバーのパスで使用されます。データは、コンボ ボックスの双方向バインディングを使用してバインドされます。ワークフローに配置された保存済みアクティビティが再度開かれると、データが正しく再ロードされ、正しいオブジェクトの値がコンボ ボックスに設定されます。ただし、UI レンダリングでは、コンボ ボックスに関連付けられている値のみがそのまま残ります (つまり、選択された値のパスと表示メンバーのパスにある値)。残りはリセットされます。
なぜこれが起こっているのでしょうか?
PS:バインドを に設定するOneTime
と取得の問題は解決しますが、読み込み後に UI に加えられた変更は反映されません。
コード ビハインド:
public ObservableCollection<MyRule> AllRules {get;set;}
public MyRule myRule{get;set;}
datagrid Loaded Event で、AllRules を次のように入力します。
AllBusinessRules.Add(new MyRule () { RuleId = item.Id, RuleName = item.Name});
ここでitem.Id
、 とitem.Name
は、サービス コールを介してデータベースから取得されます。
同じイベントで、以前に保存したルールも次のようにロードした場合:
myRule=SelectedRule;
どこSelectedRule
にRuleId, RuleName, Inputs and Outputs
もあります。
コード:
<ComboBox
ItemsSource="{Binding Path=AllRules}"
SelectedItem="{Binding Path=myRule,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
SelectedValuePath="RuleId"
DisplayMemberPath="RuleName">
<DataTemplate>
<TextBox Text="{Binding Path=myRule.RuleName}"/>
</DataTemplate>
</ComboBox>
クラス:
public class MyRule{
public int RuleId{get;set;}
public string RuleName{get;set;}
public List<string> Inputs{get;set;} //properties that are reset when the UI renders
public List<string> Outputs{get;set;} //properties that are reset when the UI renders
}
Inputs プロパティと Outputs プロパティは、リフレクションを介してプログラムで生成されたコントロールから取得され、コンボボックスによって取り込まれたオブジェクトに追加されて保存されます。
ここでこの問題について調べましたが、解決策は私の問題を解決しません。どんな助けでも素晴らしいでしょう。