リモートサーバー上の特定の属性にデータが使用できるかどうかに応じて、nullの可能性のある多数の属性を持つモデルがあります。C#のリフレクションを使用したxaml要素へのアクセスと変更
私は携帯電話でこの情報のより簡単にアクセス可能なバージョンを提供する簡単なWindows電話アプリケーションを構築しています。私は、上記のモデルのプロパティが設定されていない場合、値が表示されない(空白を表示する)が、ラベルはまだ表示されることがわかりました。
これに対して、if文の膨大な量(ughを含む)を考慮した後、xamlの特定の属性の名前を、私が探していたデータモデルのプロパティと一致させる次に、リアルタイムで、システムがデータモデルのプロパティとxamlの要素を分析するようにします。私のxamlのプロパティがモデルのプロパティの名前と一致し、モデルがnullの場合、私は可視性を折りたたむことができます。モデルがnullでない場合は、モデルを可視にします。したがって、私は実際に利用可能なデータだけを表示するきれいでダイナミックなソリューションを持つことができました。
は、ここでは、コード残念ながら
PropertyInfo[] properties = data.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
FieldInfo view = this.GetType().GetField(property.Name);
if (view != null)
{
if (property.GetValue(data, null) == null)
{
object aView = view.GetValue(this);
aView.GetType().GetProperty("Visibility").SetValue(aView, "Collapsed", null);
}
else
{
object aView = view.GetValue(this);
aView.GetType().GetProperty("Visibility").SetValue(aView, "Visible", null);
}
}
}
だ、私は暗礁に乗り上げます。私はxaml要素にアクセスする方法を理解できません。私は使用しようとしました
this.GetType().GetProperties()
this.GetType().GetFields()
this.GetType().GetMembers()
私が探している要素を見つけるには、それらのいずれにも表示されません。私が紛失しているものがありますか?
これを行うにはもっと美しい方法がありますか?
ご協力いただきありがとうございます。
あなたはこれについて間違った方法をとっていると思います。 MVVMパターンに従い、可視性をモデル内のプロパティにバインドして、利用可能なデータがあるかどうかを判断する必要があります。 –
@JeffMercado MVVMパターンに従う必要はありません!これが単純なアプリケーションの場合、コードビハインドのビットは何の害も及ぼしません。 – ColinE
あなたはそれを行う方法の提案があれば、私はすべての耳です!理想的には、この要素に関連するすべての要素を含むStackPanelが表示/折りたたまれます。 –