2016-12-14 5 views
0

Здравствуйте, я не могу понять, почему мой Combox остается пустым:/C# связывание ComboBox SelectedItem UWP

На странице загрузки первой Combox получает населенную страну (из JSON), то вторые выпадающий должен заполнить, когда страна выбрана в первом поле со списком. Я пытаюсь получить SelectedItem (страна) как строку в свойстве ... SelectedItem имеет тип ComboBoxItem? Я думаю, что это происходит неправильно.

The (вид) модель, в которой сортировочные Bindable свойства:

public class LocalityModel : NotifyProp 
{ 
    #region properties 
    private static List<LocalityJSON> dataList; 
    public List<LocalityJSON> DataList 
    { 
     get 
     { 
       return dataList; 
     } 
     set { 
      dataList = value; 
      RaisePropertyChanged("Landen"); 
      RaisePropertyChanged("Gewesten"); 
     } 
    } 

    public List<string> Landen 
    { 
     get { if (DataList == null) return null; return (from s in DataList orderby s.Land select s.Land).Distinct().ToList<string>(); } 
    } 
    public string SelectedLand { get; set; } 
    public List<string> Gewesten { 
     get { if (DataList == null) return null; return (from s in DataList where s.Land.Equals(SelectedLand) select s.Gewest).Distinct().ToList<string>(); } 
    } 
    #endregion 
    #region ctor 
    public LocalityModel() 
    { 
     FillDataList(); 
    } 
    #endregion 
    #region methodes 
    public async void FillDataList() 
    { 
     if (DataList == null) 
     { 
      DataList = await EVNT.Entries(); 
     } 
    } 
    #endregion 
} 

MainPage XAML (привязок):

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" DataContext="{Binding Source={StaticResource LocalityModel}}"> 
... 
     <TextBlock x:Name="txbCountry" Style="{StaticResource InfoLabelCountry}" /> 
     <ComboBox x:Name="cboCountry" Style="{StaticResource CountryBox}" ItemsSource="{Binding Landen}" SelectedItem="{Binding SelectedLand, Mode=TwoWay}" /> 
     <TextBlock x:Name="txbGewest" Style="{StaticResource InfoLabelGewest}" /> 
     <ComboBox x:Name="cboGewest" Style="{StaticResource GewestBox}" ItemsSource="{Binding Gewesten}" /> 

INotifyPropertyChanged:

public class NotifyProp : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

модели для JSON:

public class LocalityJSON 
{ 
    public string FB_ID { get; set; } 
    public string Land { get; set; } 
    public string Gewest { get; set; } 
    public string City { get; set; } 
} 

JSON десериализация (менее важно для вопроса):

public class EVNT 
{ 
    public async static Task<List<LocalityJSON>> Entries() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri(@"http://e-vnt.com/admin/core/api/"); 
      HttpResponseMessage response = await client.GetAsync("localityApi"); 
      if (response.IsSuccessStatusCode) 
      { 
       String s = await response.Content.ReadAsStringAsync(); 
       List<LocalityJSON> entries = JsonConvert.DeserializeObject<List<LocalityJSON>>(s); 
       return entries; 
      } 
      else 
       return null; 
     } 
    } 
} 

enter image description here

+0

Совет: при копировании кода, де-отступ, так что внешний уровень hs четыре пространства отступа. Это позволяет избежать ненужной горизонтальной прокрутки. –

+0

Приношу свои извинения, я сделаю это в следующий раз –

+0

Не нужно извиняться. Но вы можете отредактировать этот пост. –

ответ

2

В вашем инкубаторе SelectedLand собственности вы должны стрелять PropertyChanged Ивентов для обоих SelectedLand и Gewesten.

Это, вероятно, выглядеть как этот

private string _SelectedLand; 
public string SelectedLand 
{ 
    get 
    { 
     return _SelectedLand; 
    } 
    set 
    { 
     _SelectedLand = value; 
     RaisePropertyChanged("SelectedLand"); 
     RaisePropertyChanged("Gewesten"); 
    } 
} 

если вы не срабатывают PropertyChanged событие для Gewesten то, что выпадающий не будет знать, чтобы перезагрузить это значения.

+0

Это было полностью :) Спасибо, сэр –

Смежные вопросы