我试图创建一个简单的票务公平应用程序,但我被困在某个地方。 我有load-Data()方法,它填充了2个组合框(目标和源),每个包含相同的城市列表。我希望从源中删除目的地的所选项目(城市)。
我禁用了源组合框,该组合框从Destination组合框的Selection_Changed事件中启用。
我尝试在Selection_Changed事件中从源中删除所选的Destination项。但是如果用户首先选择了错误的项目,那么我怎么了呢?无论如何它都会从源头上删除。
任何建议如何实现这一目标?
这是我尝试过的代码:
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);
}
}
}
答案 0 :(得分:3)
首先,在所有这些方法中,即在类中(很可能是Form#),声明一个名为cities的公共变量: -
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>());
}
最后,在 SourceCombo SelectionChanged 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添加类似的代码,以便无论用户单击哪个ComboBox(源或目标),都会从其他ComboBox中删除选择。