2015-08-23 4 views
0

Как правильно привязать к combox на телефоне Windows 8.1 Я пробовал то, что я обычно делал бы в winforms, но он не работал. Кроме того, для страницы настроек это еще одна стандартная практика для приложения «Телефонный магазин» 8.1, чтобы создать страницу настроек так же, как и Silverlight.Combo Box Binding Phone 8.1 UAP

И перед тем, как вы спросите, да, данные являются их прекрасными.

public class City 
{ 
    public string id { get; set; } 
    public string timing_title { get; set; } 
} 
public class CitysList 
{ 
    public List<City> cityList { get; set; } 
} 

Я думал, что DisplayMmember путь будет работать, если его набор из источника элемента

<ComboBox x:Name="cboCitys" ItemsSource="{Binding}" DisplayMemberPath="{Binding timing_title}" HorizontalAlignment="Left" Margin="18,73,0,0" VerticalAlignment="Top" Width="343" Height="51"> 

</ComboBox> 

Как я Fetech данные

popcornpk_Dal _dal = new popcornpk_Dal(); 

CitysList _mycities = await _dal.GetCityListAsync(); 
cboCitys.ItemsSource = _mycities.cityList; 

ответ

1

DisplayMemberPath используется, чтобы указать путь к отображаемому собственности , вам не нужно связывать его

DisplayMemberPath="timing_title" 

рядом, что было бы гораздо более изящным, если вы связываете ваши combobox «S itemSource свойству Collection, и реализации INotifyPropertyChanged в вашем CitysList классе, например, так:

public class CitysList:INotifyPropertyChanged 
    { 

     private ObservableCollection<City> _citylist ; 
     public ObservableCollection<City> CityList 
     { 
      get 
      { 
       return _citylist; 
      } 

      set 
      { 
       if (_citylist == value) 
       { 
        return; 
       } 

       _citylist = value; 
       OnPropertyChanged(); 
      } 
     }    
     public event PropertyChangedEventHandler PropertyChanged;    
     protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

Xaml

<ComboBox ItemsSource="{Binding CitysList}" DisplayMemberPath="timing_title" /> 

и не забудьте установить DataContext экземпляру класса, хранящему эту коллекцию, и обновить список, просто переустановить его.

CityList = new ObservableCollection<City>(await _dal.GetCityListAsync()); 

Update

Чтобы установить dataContext,

Первый Создать CityList свойство в коде,

private CitysList _cityList ; 
    public CitysList CityList 
    { 
     get 
     { 
      return _cityList; 
     } 

     set 
     { 
      if (_cityList == value) 
      { 
       return; 
      } 

      _cityList = value; 
      OnPropertyChanged(); 
     } 
    } 

Второй установите страницу DataContext в коде используя

this.DataContext=this; //in the main constructor 

или Xaml использованием

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

Combobox автоматически наследуют страницу с DataContext

Третий Привязать к вашей коллекции

<ComboBox x:Name="cboCitys" ItemsSource="{Binding CityList.CityList}" DisplayMemberPath="timing_title" HorizontalAlignment="Left" Margin="18,73,0,0" VerticalAlignment="Top" Width="343" Height="51"> 

PS: Вы можете также рассмотреть добавление CityList coll ection прямо в вашем коде, нет необходимости добавлять класс только для хранения этой коллекции!

+0

I jsut всегда использовал элемент источника. Можете ли вы показать мне, как установить для него контекст данных. – rogue39nin

+0

Я получаю эту ошибку в CityList = что здесь не так, вы можете привести пример, как я установил данные до comoboxo plz – rogue39nin

+0

проверить обновление, позвольте мне теперь, если вам нужно что-то еще – Usama