我有一個模型具有一些可能爲或不可爲null的屬性,具體取決於數據是否可用於遠程服務器上的這些特定屬性。在C中使用反射訪問和修改xaml元素#
我正在構建一個簡單的Windows Phone應用程序,該應用程序可以在手機上爲這些信息提供更容易訪問的版本。我發現,如果上述模型的屬性未設置,則該值不會顯示(顯示空白),但標籤仍顯示出來。
在考慮了許多不同的選擇(包括大量的if語句,呃)之後,我決定如果我爲xaml中的特定屬性設置名稱以匹配我正在尋找的數據模型的屬性在那時,我實時分析了數據模型的屬性以及我的xaml的元素。如果我的xaml中的屬性與我的模型中的屬性名稱匹配,並且模型爲空,則可以將可見性變爲摺疊狀態。如果模型不爲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模式並將可見性綁定到模型中的屬性,以確定您的數據是否可用。 – 2012-02-24 08:44:16
@JeffMercado您不必遵循MVVM模式!如果這是一個簡單的應用程序,一些代碼隱藏不會造成任何傷害。 – ColinE 2012-02-24 08:46:09
如果您有關於如何做到這一點的建議,我全都是耳朵!理想情況下,包含與此元素相關的所有元素的StackPanel將可見/摺疊 – 2012-02-24 08:47:59