0

我正在使用 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>
4

2 回答 2

2

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

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

ListBox myList = (ListBox) e.Source;

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

于 2013-04-19T03:01:47.443 回答
1

根据我的研究,列表框的 SelectedIndex 属性不可绑定,当您对 SelectedIndex 属性使用 get 访问器时,它始终返回 -1。尝试对 SelectedIndex 属性使用 set 访问器会引发 NotSupportedException。-- MSDN List selectedporterty

我还更新了我的代码,因为我的第一个代码是错误的,它创建了新的列表框并导致为空/空。此外 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));
                }
            }
         }
}

而已。希望能帮助到你!:)

于 2013-04-19T09:40:52.997 回答