2011-11-21 42 views
0

我有以下幾點:如何在我的viewModel中設置一個值?

namespace Test { 

public class Location { 
    public string city { get; set; } 
} 

public class BaseViewModel { 
    public BaseViewModel() { 
     Location = new Location { city = "Paris"; }; 
    } 
    public Location Location { get; set; } 
} 

public class EditViewModel : BaseViewModel { 
    public Book Book { get; set; } 
    Location = "France"; 
} 

} 

這似乎是一個奇怪的要求,但我怎麼能設置位置的值從EditViewModel內?下面的行給出以下錯誤:

Location = "France"; 
Error 2 Invalid token '=' in class, struct, or interface member declaration 

回答

1

添加構造函數。

public EditViewModel() { 
    Location = "France"; 
} 

或最好加一個專門的構造函數,默認的構造函數:

public EditViewModel (string LocationText) { 
     Location = LocationText; 
    } 

    public EditViewModel() : this("France") { } 

只是要準確,不要使用字符串,用你的對象,我用字符串加快。

+0

我認爲最好不要使用專門的構造函數。問題的意見,但是當你這樣做時,你可能會發現你每次想要初始化另一個屬性時都會不斷地改變構造函數。我這樣做的唯一時候是當我沒有默認的構造函數,我需要強制一些字段進行初始化。 –

+0

@RobKent我可能會同意,如果層次樹很深,但只有兩個類,我猜他應該沒有問題。我更喜歡廣泛使用:base()或:this()這個東西(它在C#中是否也稱爲初始化列表?),但正如你所說的那樣,它只取決於個人的品味和場景。 – BigMike

0

您需要istantiate對象的位置,而不是將其設置爲一個字符串:

Location = new Location { city = "France" }; 

,如果你用不同的名稱重命名屬性,最好不要使用類名。

public class BaseViewModel { 
    public BaseViewModel() { 
     CurrentLocation = new Location { city = "Paris"; }; 
    } 
    public Location CurrentLocation { get; set; } 
} 

public class EditViewModel : BaseViewModel { 
    public Book Book { get; set; } 
    public EditViewModel() : base() 
    { 
     CurrentLocation = new Location { city = "France"; }; 
    } 
} 
0

你只需要改變EditViewModel類..

像這樣:

public class EditViewModel : BaseViewModel { 
    public Book Book { get; set; } 

    public EditViewModel(){ 
     Location = "France"; 
    } 
} 

*您正在嘗試值設置爲類的範圍基類屬性.. 這是不允許的..

你可以這樣做在類的任何其他方法的構造函數..正如我上面提到的..

希望這種幫助!

相關問題