C# pName); } } }

C# pName); } } },c#,xaml,windows-phone-8.1,winrt-xaml,win-universal-app,C#,Xaml,Windows Phone 8.1,Winrt Xaml,Win Universal App,这对我来说很好。找到了解决方法,因为以前的解决方案无法解决我的问题 只需在绑定和选择组合框的项目或索引之间添加一个暂停 代码如下: myCombobox.ItemsSource = myList; await Task.Delay(100); myCombobox.SelectedIndex = 12; 希望这有帮助 为什么不在这里发布代码呢?我已经在原始帖子中添加了代码。值得一提的是,我们的应用程序中也存在同样的问题,它使用了许多异步模式。我们的结论是,这是ComboBox的一个bug。谢谢

这对我来说很好。

找到了解决方法,因为以前的解决方案无法解决我的问题

只需在绑定和选择组合框的项目或索引之间添加一个暂停

代码如下:

myCombobox.ItemsSource = myList;
await Task.Delay(100);
myCombobox.SelectedIndex = 12;

希望这有帮助

为什么不在这里发布代码呢?我已经在原始帖子中添加了代码。值得一提的是,我们的应用程序中也存在同样的问题,它使用了许多异步模式。我们的结论是,这是ComboBox的一个bug。谢谢你的建议,我今晚会尝试一下。我已经尝试过了,但是如果在我用
Add()
填充集合后,我将SelectedItem设置为第一个元素。然后,当我选择错误时,它就会出现。@TomWuyts我修改了我的答案,添加了我用来测试它的代码。在这种情况下,设置SelectedItem是有效的(至少对我来说是有效的)。这对我来说不起作用,非常奇怪。我通过改变我的用例来解决这个问题,这样它就不需要设置所选的项目了。。。很奇怪。也许我应该更改我的用例,这样我就不必选择默认项了。@TomWuyts这似乎是一个bug,所以您需要使用变通方法。数据绑定中存在错误。这解决了我绑定项目源的错误。感谢可能的解决方案,itemssource绑定或所选项目操纵任何其他方式都会导致这个难以置信的错误,所以QA很糟糕。顺便说一下,这也发生在combobox全屏选择上,但结果是一个空白的选定项,无法正确绑定combobox
private VM _vm = new VM();
public MainPage()
{
    this.InitializeComponent();
    this.DataContext = _vm;
}

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    await _vm.LoadDataAsync();
}
public class VM : INotifyPropertyChanged
{
    private List<string> _items;
    public List<string> Items
    {
        get { return _items; }
        set
        {
            _items = value;
            _selectedItem = _items.FirstOrDefault();
            RaisePropertyChanged("Items");
            RaisePropertyChanged("SelectedItem");
        }
    }

    private string _selectedItem;
    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            _selectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }

    public VM()
    {
    }

    public async Task LoadDataAsync()
    {
        this.Items = new List<string>()
        {
            "a",
            "b",
            "c",
            "d",
            "e",
            "f",
        };
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
}
public class VM : INotifyPropertyChanged
{
    private ObservableCollection<string> _items;
    public ObservableCollection<string> Items
    {
        get { return _items; }
        set
        {
            _items = value;
            _selectedItem = _items.FirstOrDefault();
            RaisePropertyChanged("Items");
            RaisePropertyChanged("SelectedItem");
        }
    }

    private string _selectedItem;
    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            _selectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }


    public VM()
    {
        this._items = new ObservableCollection<string>();
    }

    public async Task LoadDataAsync()
    {
        var items = new List<string>() {
            "1",
            "b",
            "c",
            "d",
            "e",
            "f",
            "f",
            "f",
            "f",
            "f",
            "f",
        };

        foreach (var i in items) {
            this._items.Add(i);
        }
        this.SelectedItem = items.FirstOrDefault();
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
}
myCombobox.ItemsSource = myList;
await Task.Delay(100);
myCombobox.SelectedIndex = 12;