2013-08-29 40 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; } 
} 
相关问题