c# - 如何从另一个组合框中删除组合框的所选项目

标签 c# windows-store-apps

我正在尝试创建一个简单的票务应用程序,但我被困在某个地方。 我有 load-Data() 方法,它填充 2 个组合框(目的地和源),每个组合框包含相同的城市列表。我希望从源中删除目的地的选定项目(城市)。

我禁用了从目标组合框的 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;
        }

“加载日期”方法:

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);

                }
            }
        }

最佳答案

首先,在所有这些方法所在的位置,即在类中(很可能是 Form#),声明一个名为城市的公共(public)变量:-

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 中删除选择。

关于c# - 如何从另一个组合框中删除组合框的所选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33156211/

相关文章:

C# 相当于使用 python 切片操作旋转列表

c# - .NET 标准说明

javascript - 从 C# 页面加载传递数组的数组以在 Javascript 函数中使用

c# - 如何在Sqlite中使用通配符匹配目录路径

c# - 在 Store App 中使用 MVVM 进行页面导航

c# - VirtualKey C# Windows 应用商店应用程序

c# - 如何使用 C# Windows 应用程序读取 onedrive 文件夹

c# - 具有搜索模式的 StorageFolder.GetFilesAsync() 方法?

c# - 我如何在 .net 中获取 cpu 信息?

c# - 单元测试依赖于 UserManager<TUser> 的 Controller 的最佳实践?