Xaml 为什么在设置ComboBox.SelectedIndex时出现异常?

Xaml 为什么在设置ComboBox.SelectedIndex时出现异常?,xaml,data-binding,uwp,winrt-xaml,Xaml,Data Binding,Uwp,Winrt Xaml,我正在努力学习绑定和XAML。我有一个非常简单的示例,其中我将字符串数组绑定到XAML中定义的组合框。我还想设置所选索引 我得到一个例外: 值不在预期范围内 使用SelectedIndex属性 这里是我的XAML,用于UWP应用程序 以及背后的代码 公共密封部分类主页面:第页 { 私有字符串[]组合字符串={“一”、“二”、“三”}; 公共列表组合字符串 { 获取{返回新列表(组合字符串);} } 公共主页() { this.InitializeComponent(); DataContex

我正在努力学习绑定和XAML。我有一个非常简单的示例,其中我将字符串数组绑定到XAML中定义的组合框。我还想设置所选索引

我得到一个例外:

值不在预期范围内

使用SelectedIndex属性

这里是我的XAML,用于UWP应用程序


以及背后的代码

公共密封部分类主页面:第页
{
私有字符串[]组合字符串={“一”、“二”、“三”};
公共列表组合字符串
{
获取{返回新列表(组合字符串);}
}
公共主页()
{
this.InitializeComponent();
DataContext=this;
BrowserCombo.SelectedIndex=1;
}
已加载私有无效页面(对象发送方,路由目标e)
{
//BrowserCombo.SelectedIndex=1;
}
}
我希望它非常简单,所以没有MVVM-我仍然需要学习这个概念

备注:

  • 我可以将SelectedIndex放入XAML文件中。同样的问题
  • 如果我将SelectedIndex放在页面加载的事件处理程序中,它可以正常工作
  • 在经典的桌面XAML(又名WPF)中,不会有问题

  • 似乎XAML WinRt和XAML-WPF之间的项目列表填充方式不同。访问SelectedIndex属性的最早点是什么?

    您会遇到此异常,因为当您尝试设置
    BrowserCombo.SelectedIndex=1时,您的ItemsSource仍然为空在页面的构造函数中。您正在使用
    x:Bind
    -如果调试生成的MainPage.g.cs文件并在其中放置一些断点:

    公共无效加载(全局::Windows.UI.Xaml.FrameworkElement src,对象数据)
    {
    这是初始化();
    }
    公共无效初始化()
    {
    如果(!this.initialized)
    {
    这个.Update();
    }
    }
    公共无效更新()
    {
    this.Update_u(this.dataRoot,而不是_);
    this.initialized=true;
    }
    
    您将看到加载事件中正在解析
    x:Bind
    ——这解释了为什么在构造函数中ItemsSource中仍然有null

    另一件事是,对于旧绑定,当您设置
    DataContext=this时,它将被解析
    ,但是您使用的是
    x:Bind
    ,实际上您不需要设置DataContext,它在这里不会改变任何东西。如果用
    ItemsSource=“{Binding ComboStrings}”
    替换
    ItemsSource=“{Binding ComboStrings}”
    则代码应该可以工作,否则可以删除行
    DataContext=this

    另一件有趣的事情是,XAML中已定义绑定的顺序也可能导致类似的问题-例如,如果您这样定义组合框:

    
    
    然后,您还将获得异常-在设置集合之前,正在解析exception-SelectedIndex。与工作正常的情况相反: