我正在使用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>
答案 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));
}
}
}
}
多数民众赞成。希望能帮助到你! :)