0
我正在使用MVVM並在我的數據庫中有一個字段,它是一個字符串並表示一個座標。在屏幕上,我想將其分解爲座標部分,以方便用戶進行編輯。到目前爲止,我有一個類來幫助:WPF複合/級聯字段
public class Coord
{
public int LatDegree {get;set;}
public int LatMinute {get;set;}
public int LatSecond {get;set;}
public char Latitude {get;set;}
public int LonDegree {get;set;}
public int LonMinute {get;set;}
public int LonSecond {get;set;}
public char Longitude {get;set;}
public Coord(string coord)
{
string[] coordAsString =coord.Split(' ');
this.LatDegree=Int32.Parse(coordAsString[0]);
this.LatMinute=Int32.Parse(coordAsString[1]);
this.LatSecond=Int32.Parse(coordAsString[2]);
this.Latitude = (coordAsString[3].ToCharArray())[0];
this.LonDegree = Int32.Parse(coordAsString[4]);
this.LonMinute = Int32.Parse(coordAsString[5]);
this.LonSecond = Int32.Parse(coordAsString[6]);
this.Longitude = (coordAsString[7].ToCharArray())[0];
}
public override string ToString()
{
string asString = String.Format(...//omitted for brevity
return asString;
}
}
在我的視圖模型
private Coord relativeGridOrigin;
private Coord RelativeGridOrigin
{
get
{
if(relativeGridOrigin==null)
{
relativeGridOrigin = new Coord(myMainObject.relativeGridOrigin);
}
return relativeGridOrigin;
}
set
{
relativeGridOrigin = value;
myMainObject.relativeGridOrigin = relativeGridOrigin.ToString();
}
}
和我目前正在結合lattitude degre控制:
public int LatitudeDegree
{
get { return RelativeGridOrigin.LatDegree; }
set
{
RelativeGridOrigin.LatDegree = value;
myMainObject.relativeGridOrigin = relativeGridOrigin.ToString();
}
}
但我不t想要那LatitudeDegree包裝(和其他7我需要) - 我想只綁定控制LatDegree在我的Coord對象,但我需要myMainObject.relativeGridOrigin任何時候改變這8個值之一更改_我認爲一世 想要調用RelativeGridOrigin設置器。我想我需要將RelativeGridOrigin設置器傳遞給Coord類,或讓我的視圖模型監聽Coord類的屬性更改,但我不知道如何做,或者是否有另一種更好的方法。
不幸的是,這正是MVVM模式所要求的:VM需要公開UI將使用的任何屬性。您還需要在虛擬機中進行某種更新通知,它看起來不像您有任何更新通知。 – Tyrsius 2012-04-26 19:47:04
對不起,我不明白你的意思是需要某種更新通知。我最終傳遞了一個委託來將relativeGridOrigin更新到Coord類中,並讓每個setter調用它,但實際上它與我之前使用LatitudeDegree包裝進行的操作相同。我想另一種方式是讓Coord類在VM中提出事件並聽取它。 – Nix 2012-04-27 07:24:26