ListBox Index返回负值

时间:2013-04-19 02:57:23

标签: windows-phone-7 mvvm listbox listboxitem selectedindex

我正在使用MVVM灯光模式创建一个Windows手机应用程序。我在列表框上遇到问题,因为它总是返回所选索引的负值(-1)。有谁知道如何解决它?

这是我在View Model中的代码,我错过了什么吗?谢谢!

 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>

2 个答案:

答案 0 :(得分:2)

您正在代码中创建一个新的ListBox()(称为lb)。你没有填充它,所以它将是空的并且将始终具有-1的

的SelectedIndex

然后检查'e'的'Source'属性并将其转换为ListBox

ListBox myList = (ListBox) e.Source;

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

答案 1 :(得分:1)

根据我的研究,listbox的SelectedIndex属性是不可绑定的,当你对SelectedIndex属性使用get访问器时,它总是返回-1。尝试对SelectedIndex属性使用set访问器会引发NotSupportedException。 - MSDN List selectedporperty

我还更新了我的代码,因为我的第一个代码是错误的,它创建了新的列表框,结果为空/ null。 selectchanged事件也没有问题可以用作事件。

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

多数民众赞成。希望能帮助到你! :)