Windows phone 7 列表框索引返回负值
我正在使用MVVM灯光模式创建windows phone应用程序。我的列表框出现问题,因为它总是为所选索引返回负值(-1)。有人知道怎么解决吗 这是我的代码视图模型,我遗漏了什么吗?谢谢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) {
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;