2013-08-29 43 views
0

我在stackoverflow和MSDN中搜索了很長時間,我不確定標記的答案爲什麼適用於其他人,但對我無效。爲什麼我的組合框的第一個項目總是空的

我有一個市級這樣

public class City 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public static List<City> GetDefaultCities() 
    { 
     List<City> cities = new List<City>(); 
     cities.Add(new City { Id = 1, Name = "New York" }); 
     cities.Add(new City { Id = 2, Name = "Chicago" }); 
     cities.Add(new City { Id = 3, Name = "Miami" }); 
     cities.Add(new City { Id = 4, Name = "Houston" }); 
     cities.Add(new City { Id = 5, Name = "Dallas" }); 

     return cities; 
    } 
} 

在我的ViewModel屬性:

private List<City> cities; 
    public List<City> Cities 
    { 
     get { return City.GetDefaultCities(); } 
     set { cities = value; } 
    } 

    private City selectedCity; 
    public City SelectedCity 
    { 
     get { return selectedCity; } 
     set 
     { 
      if (selectedCity != value) 
      { 
       selectedCity = value; 
       RaisePropertyChanged("SelectedCity"); 
      } 
     } 
    } 

的XAML在我看來

<ComboBox ItemsSource="{Binding Cities}" Width="100" Height="30" 
       DisplayMemberPath="Name" 
       SelectedValuePath="Id" 
       SelectedItem="{Binding SelectedCity}" 
       /> 

我曾嘗試3級的解決方案: 1.在XAML中將SelectedIndex設置爲0; 2.將Text Property設置爲XAML中城市名稱的第一個元素; 3.在ViewModel中將默認值設置爲City屬性;

但所有這些都不起作用,第一個元素總是空的。任何人都可以幫忙?

+0

您是否試圖將selectedvalue而不是selecteditem綁定到SelectedId並通過vm設置SelectedId? – dnr3

+0

@ dnr3,不能請提供更多細節?如何在vm中設置SelectedId – James

+0

我的意思是在你的vm中創建另一個名爲SelectedId的屬性來綁定到ComboBox的SelectedValue,因爲ComboBox的SelectedItem可能不是你正在尋找的那個(該值可能是一個ComboBoxItem和不是城市的一個實例) – dnr3

回答

0

你應該建立在構造函數中城市的名單,然後分配與列表

public CityListViewModel() 
{ 
    cities = City.GetDefaultCities(); 
    selectedCity = cities[0]; 
} 

的第一個值的selectedCity,然後你可以返回的城市屬性的getter

城市已經充滿名單
public List<City> Cities 
{ 
    get { return cities; } 
    set { cities = value; } 
} 
相關問題