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;