2015-10-15 160 views
2

我試圖創建一個簡單的門票公平應用程序,但我卡在某個地方。 我有裝載2組合框(目的地&源),其中每個都包含相同的城市列表的load-Data()方法。我希望從源中移除目的地的所選項目(城市)。如何從另一個組合框中刪除組合框的選定項目

我禁用了從組合框的Selection_Changed事件中啓用的源組合框。

我試着在Selection_Changed事件中從源中刪除選定的目標項目。但是,然後它發生了什麼,如果用戶首先選擇了錯誤的項目?無論如何,它將從源代碼中刪除。

任何建議如何實現這一目標?

這是我試過的代碼:

private void DestinationCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      // await LoadData(); 
     object selectedItem = DestinationCombo.SelectedItem; 
      if(SourceCombo.Items.Contains(selectedItem)) 
      { 
       SourceCombo.Items.Remove(selectedItem); 
      } 

     //await LoadData(); 
     SourceCombo.IsEnabled = true; 
     } 

'LoadDate' 方法:

private async Task LoadData() 
     { 
      DestinationCombo.Items.Clear(); 
      SourceCombo.Items.Clear(); 
      file = await ApplicationData.Current.LocalFolder.GetFileAsync("jsonText.txt"); 
      var jsonContent = await FileIO.ReadTextAsync(file); 

      DataModel2.RootObject states = JsonConvert.DeserializeObject<DataModel2.RootObject>(jsonContent); 

      foreach (var state in states.country.state) 
      { 
       foreach (var city in state.city) 
       { 

        DestinationCombo.Items.Add(city); 
        SourceCombo.Items.Add(city); 

       } 
      } 
     } 
+2

我建議你先發布你的代碼/先試試 –

+0

我已經使用代碼編輯我的帖子 –

+0

你可以發佈load-data()方法嗎? –

回答

3

首先,所有這些方法,即在類(最有可能是表#),聲明一個公共變量稱爲城市: -

public list<string> cities = new list<string>; 

然後編輯您的loaddata()方法一點:

private async Task LoadData() 
    { 
     DestinationCombo.Items.Clear(); 
     SourceCombo.Items.Clear(); 
     file = await ApplicationData.Current.LocalFolder.GetFileAsync("jsonText.txt"); 
     var jsonContent = await FileIO.ReadTextAsync(file); 

     DataModel2.RootObject states = JsonConvert.DeserializeObject<DataModel2.RootObject>(jsonContent); 

     foreach (var state in states.country.state) 
     { 
      foreach (var city in state.city) 
      { 
       cities.Add(city); 
      } 
     } 

     DestinationCombo.Items.AddRange(cities.ToArray<String>()); 
     SourceCombo.Items.AddRange(cities.ToArray<String>()); 
    } 

最後,在SourceComboSelectionChanged Event,把這個代碼:

private void SourceCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     // await LoadData(); 
    object selectedItem = SourceCombo.SelectedItem; 
    DestinationCombo.Items.Clear(); 
    DestinationCombo.Items.AddRange(cities.ToArray<String>()); 
    DestinationCombo.Items.Remove(selectedItem); 
    } 

你也可以類似的代碼的其他組合框添加,使兩者組合框(源或目標)用戶點擊時,選擇將從其他ComboBox中刪除。

+0

不會在城市中使用全局變量或表單變量。 –

+0

是的,我假設網絡。我現在看到Windows商店應用程序。 –

+0

@ FarhanAnam 它沒有改變任何東西,但使其變得更糟,在「DestinationCombo.Items.Clear();」上引發此異常{「Catastrophic failure(Exception from HRESULT:0x8000FFFF(E_UNEXPECTED))」}} –

相關問題