Windows phone 7 列表框索引返回负值

Windows phone 7 列表框索引返回负值,windows-phone-7,mvvm,listbox,listboxitem,selectedindex,Windows Phone 7,Mvvm,Listbox,Listboxitem,Selectedindex,我正在使用MVVM灯光模式创建windows phone应用程序。我的列表框出现问题,因为它总是为所选索引返回负值(-1)。有人知道怎么解决吗 这是我的代码视图模型,我遗漏了什么吗?谢谢 public void OnViewListSelectedItem(SelectionChangedEventArgs e) { ListBox lb = new ListBox(); if (e.AddedItems.Count == 1) {

我正在使用MVVM灯光模式创建windows phone应用程序。我的列表框出现问题,因为它总是为所选索引返回负值(-1)。有人知道怎么解决吗

这是我的代码视图模型,我遗漏了什么吗?谢谢

 public void OnViewListSelectedItem(SelectionChangedEventArgs e)
    {

        ListBox lb = new ListBox();

        if (e.AddedItems.Count == 1)
        {
            if (lb.SelectedIndex == 0)
            {
                _navigationService.NavigateTo(new Uri(ViewModelLocator.ByVendorUrl, UriKind.Relative));
            }

            if (lb.SelectedIndex == 1)
                {
                    _navigationService.NavigateTo(new Uri(ViewModelLocator.ByVendorUrl, UriKind.Relative));
                }
            if (lb.SelectedIndex == 2)
                {
                    _navigationService.NavigateTo(new Uri(ViewModelLocator.ByCombinationUrl, UriKind.Relative));
                }
            }
    }
这里是XAML代码

 <ListBox x:Name="lbviewlist">
                <i:Interaction.Triggers>
                        <i:EventTrigger EventName="SelectionChanged">
                            <Command:EventToCommand Command="{Binding ViewListCommand}" PassEventArgsToCommand="True"/>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                    <ListBox.Items>
                    <ListBoxItem Content="By Product" FontSize="35" Margin="10,12,12,0"/>
                    <ListBoxItem Content="By Vendor" FontSize="35" Margin="10,12,12,0"/>
                    <ListBoxItem Content="By Best Combination" FontSize="35" Margin="10,12,12,0"/>
                    </ListBox.Items>
                </ListBox>

您正在代码中创建一个新的ListBox()(称为lb)。您不填充它,因此它将为空,并且始终具有-1的SelectedIndex

然后检查“e”的“Source”属性并将其强制转换为列表框

ListBox myList = (ListBox) e.Source;

然后可以访问myList上的属性。

您正在代码中创建一个新的ListBox()(称为lb)。您不填充它,因此它将为空,并且始终具有-1的SelectedIndex

然后检查“e”的“Source”属性并将其强制转换为列表框

ListBox myList = (ListBox) e.Source;

然后,您可以访问myList上的属性。

根据我的研究,listbox的SelectedIndex属性不可绑定,当您对SelectedIndex属性使用get访问器时,它总是返回-1。尝试对SelectedIndex属性使用集合访问器将引发NotSupportedException。-

我还更新了我的代码,因为我的第一个代码是错误的,它创建了新的列表框,结果为空/空。此外,selectionchanged事件在用作事件时没有问题

    public void method (SelectionChangedEventArgs e)
    {


        {                
            if (e.AddedItems.Count == 1)
            {
                var listBoxItem = (ListBoxItem)e.AddedItems[0];
                string _string1 = "Test";
                if ((string)listBoxItem.Content == _string1)
                {
                    navigationService.NavigateTo(new Uri(ViewModelLocator.page1, UriKind.Relative));
                }
            }
         }
}

就这样。希望有帮助!:)

根据我的研究,listbox的SelectedIndex属性是不可绑定的,当您对SelectedIndex属性使用get访问器时,它总是返回-1。尝试对SelectedIndex属性使用集合访问器将引发NotSupportedException。-

我还更新了我的代码,因为我的第一个代码是错误的,它创建了新的列表框,结果为空/空。此外,selectionchanged事件在用作事件时没有问题

    public void method (SelectionChangedEventArgs e)
    {


        {                
            if (e.AddedItems.Count == 1)
            {
                var listBoxItem = (ListBoxItem)e.AddedItems[0];
                string _string1 = "Test";
                if ((string)listBoxItem.Content == _string1)
                {
                    navigationService.NavigateTo(new Uri(ViewModelLocator.page1, UriKind.Relative));
                }
            }
         }
}

就这样。希望有帮助!:)

谢谢,我刚刚意识到创建新的列表框是错误的。但是,您知道如何检查lblistview的选择状态吗?我不知道如何从我的代码中访问lblistview。唯一可访问的是(e)。你能帮助我吗?请感谢您在XAML中为它命名的LOT,因此您可以在Visual Studio中从它的名称(lbviewlist)访问它,只需键入名称和“.”,您就会看到可用的属性、事件和方法。我无法从它的名称访问它,因为我不是从代码隐藏处编码,而是使用视图模型。访问它的唯一方法是通过我的方法ViewListCommand的参数(e),该参数绑定到我的listbox的事件。但是当我在ViewModel中按字面意思键入(e)时,唯一可用的选项是AddedItems,如上面代码所示。哦,我明白了。e应该有一个指向控件的“Source”属性:没问题……请参见上面的答案:)ListBox myList=(ListBox)e.Source;谢谢,我刚刚意识到创建新的列表框是错误的。但是,您知道如何检查lblistview的选择状态吗?我不知道如何从我的代码中访问lblistview。唯一可访问的是(e)。你能帮助我吗?请感谢您在XAML中为它命名的LOT,因此您可以在Visual Studio中从它的名称(lbviewlist)访问它,只需键入名称和“.”,您就会看到可用的属性、事件和方法。我无法从它的名称访问它,因为我不是从代码隐藏处编码,而是使用视图模型。访问它的唯一方法是通过我的方法ViewListCommand的参数(e),该参数绑定到我的listbox的事件。但是当我在ViewModel中按字面意思键入(e)时,唯一可用的选项是AddedItems,如上面代码所示。哦,我明白了。e应该有一个指向控件的“Source”属性:没问题……请参见上面的答案:)ListBox myList=(ListBox)e.Source;