2012-04-26 73 views
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類的屬性更改,但我不知道如何做,或者是否有另一種更好的方法。

+0

不幸的是,這正是MVVM模式所要求的:VM需要公開UI將使用的任何屬性。您還需要在虛擬機中進行某種更新通知,它看起來不像您有任何更新通知。 – Tyrsius 2012-04-26 19:47:04

+0

對不起,我不明白你的意思是需要某種更新通知。我最終傳遞了一個委託來將relativeGridOrigin更新到Coord類中,並讓每個setter調用它,但實際上它與我之前使用LatitudeDegree包裝進行的操作相同。我想另一種方式是讓Coord類在VM中提出事件並聽取它。 – Nix 2012-04-27 07:24:26

回答

0

在此之後的答案礦MVVM pattern and dependent children 的另一個問題,我意識到這是很整齊,只是引發一個事件,只要任何座標制定者改變了值,然後虛擬機可以聽它和更新的主要對象