我有一個應用程序遵循MVVM模式,它必須序列化XML文件。由於一些XML屬性的嵌套,我創建嵌套類我的模型裏面,像這樣:模型中嵌套類屬性的ViewModel屬性
public class OPER_FILE
{
public UNB unb { get; set; }
public OPER oper { get; set; } //nested class, level 1
public OPER_FILE()
{
unb = new UNB();
oper = new OPER();
}
}
public class OPER
{
public UNH unh { get; set; } //these are all nested classes, level 2
public UVT uvt { get; set; }
public VIN vin { get; set; }
public OPER()
{
unh = new UNH();
uvt = new UVT();
}
}
#region "nested classes"
public class UNB
{
public string unb { get; set; }
public string unb_2 { get; set; }
}
public class UNH
{
public string unh { get; set; }
public string unh_2 { get; set; }
}
public class UVT
{
public string uvt { get; set; }
public string uvt_1 { get; set; }
public string uvt_2 { get; set; }
}
public class VIN
{
public string vin { get; set; }
public string vin_1 { get; set; }
public string vin_2 { get; set; }
public string vin_3 { get; set; }
public string vin_4 { get; set; }
}
#endregion
嵌套類的屬性都是字符串,因爲這簡化了對於現在的XML序列化(I」 m仍處於概念階段)。
在我相應的ViewModel中,我只是在模型內部爲嵌套類創建了一個屬性,所以我可以通過引用ViewModel中的嵌套類來訪問所有嵌套屬性。
public class OPERViewModel : IViewModelBase
{
private OPER_FILE Model;
public UNB unb
{
get
{ return Model.unb;}
set
{ Model.unb = value; }
}
public OPER oper
{
get
{ return Model.oper; } //this is the tricky part, by now I'm just referring to the nested class as a property of the model
set
{ Model.oper = value; }
}
public OPERViewModel()
{ Model = new OPER_FILE(); }
}
的問題是,但是,我想要顯示的某些屬性不是字符串,但使用的UI複選框爲布爾值。
說我要爲布爾(其中視圖模型應該管理從string
轉換爲在Model.oper.vin.vin_1
自有物業反射吸氣bool
)顯示Model.oper.vin.vin_1
,我會怎麼做呢?
我是否真的必須實現嵌套類的每個嵌套屬性作爲ViewModel的自己的屬性(如下所述)以獲得對返回到UI的方式的控制權?
//ViewModel-implementation with type-conversion of a property from a nested class of the model
//this would get bind to the UI instead of Model.oper.vin.vin_1
public bool vin_1
{
get
{
if (Model.oper.vin.vin_1 == "1")
{ return true; }
else
{ return false; }
}
set
{
if (value)
{ Model.oper.vin.vin_1 = "1"; }
else
{ Model.oper.vin.vin_1 = "0"; }
}
}
我希望有一個更好的解決方案有...
編輯:
什麼我忘了之前提到,那裏是不僅string
S作顯示爲boolean
s,也DateTime
-應顯示爲DatePicker
的值 - 控制,我希望作爲NumberPicker
的整數值和等等。和float
- 值,特殊日期格式和逗號 -
的XML文件,而另一方面,將通過接口與一些非常固定的規則,我需要匹配,兩個integer
這樣一個動態的前導零消耗而不是小數點分隔符。因此,堅持使用string
-要在序列化對象內的值是維護對xml文件中的值進行實際解析的方式的一種好方法。
我會嘗試嘗試使用一些不同的轉換器,因爲@BrandlyDOTNet推薦,但仍然對如何以其他方式解決這個問題感到好奇。
*強調打字*你的意思是將所有這些'字符串'改爲實際有用的數據類型,更好地匹配它們的值。隨着項目的進展,我可以並且非常期待。但是我必須接受一個接口的特殊需求,這個接口是用來使用xml文件的,並且有一些我必須匹配的嚴格固定的格式規則。由於快速應用程序開發是一天的順序,我希望現在可以堅持使用字符串變量,並找到一些可以減少寫入代碼量的東西。 所以我做了,謝謝你,我會看看這個'Converter'的東西。 – M463