c# – Listpicker错误SelectedItem必须始终设置为有效的值

c# – Listpicker错误SelectedItem必须始终设置为有效的值,第1张

概述我在 Windows Phone 7应用程序中有一个页面,用户可以在其中编辑或删除一个Transaction对象. Transaction对象是一个与Account类和Category类有关系的Linq-to-Sql类.在页面中,我使用ListPicker让用户选择给定事务的帐户和类别,如下所示: <toolkit:ListPicker Grid.Row="1" FullModeHeader="C 我在 Windows Phone 7应用程序中有一个页面,用户可以在其中编辑或删除一个Transaction对象. Transaction对象是一个与Account类和category类有关系的linq-to-sql类.在页面中,我使用ListPicker让用户选择给定事务的帐户和类别,如下所示:
<toolkit:ListPicker GrID.Row="1" FullModeheader="Choose the Account" FullModeItemTemplate="{StaticResource FullModeItemTemplate}" ExpansionMode="FullScreenOnly" Background="#26000000" margin="10,10,0" name="Account" SelectedItem="{Binding Account,Mode=TwoWay}" Tap="ListPicker_Tap" /><toolkit:ListPicker GrID.Row="7" FullModeheader="Choose the category" FullModeItemTemplate="{StaticResource FullModeItemTemplate}" ExpansionMode="FullScreenOnly" Background="#26000000" margin="10,0" name="category" SelectedItem="{Binding category,Mode=TwoWay}" Tap="ListPicker_Tap" />

ListPicker_Tap事件是针对windows Phone的WP / WPF工具包的8月/ 2011版本的错误的修复,只是这样:

private voID ListPicker_Tap(object sender,System.windows.input.GestureEventArgs e)    {        ListPicker lp = (ListPicker)sender;         lp.open();    }

如果用户编辑事务,一切都很好,但是如果用户尝试删除它,我会收到一个错误,指出“SelectedItem必须始终被设置为有效的值”.

如果用户点击TransactionPage.xaml.cs中的应用程序栏中的删除按钮,则代码如下:

private voID appbarDelete_Click(object sender,EventArgs e)    {        MessageBoxResult result = MessageBox.Show("Are you sure?\n","Confirm",MessageBoxbutton.OKCancel);        if (result == MessageBoxResult.OK)        {            App.viewmodel.DeleteTransaction(transaction);        }        NavigationService.GoBack();    }

我的viewmodel.DeleteTransaction方法:

public voID DeleteTransaction(Transaction transaction)    {        AllTransactions.Remove(transaction);        transactionRepository.Delete(transaction);    }

我的transactionRepository.Delete方法:

public voID Delete(Transaction transaction)    {        Context.Transactions.DeleteOnsubmit(transaction);        Context.submitChanges();    }

我在Context.submitChanges()执行中收到错误,调试指向Transaction类里面的NotifyPropertyChanged,我得到错误的行是这样的:

protected virtual voID SendPropertyChanged(String propertyname)    {        if ((this.PropertyChanged != null))        {            this.PropertyChanged(this,new PropertyChangedEventArgs(propertyname));        }    }

在propertyname属性中,值为“category”.看起来像删除对象时发送categorychanged的propertychanged事件,并且由于Listpicker是TwoWay模式,所以处理它有一些麻烦.我该如何解决?我需要一些帮助.

解决方法 问题是ListPicker希望SelectedItem是一个ListPickerItem,而你将它绑定到一个类型为Transaction的对象.您可以通过绑定到Selectedindex属性来解决问题,然后根据索引从viewmodel中选择适当的对象.

另外,如果您定义了Tap处理程序的原因是因为ListPicker在放置在ScrollVIEwer中时不会打开的错误,请查看patch ID 10247.如果您使用该修补程序重新编译工具包,则可以解决问题.

总结

以上是内存溢出为你收集整理的c# – Listpicker错误SelectedItem必须始终设置为有效的值全部内容,希望文章能够帮你解决c# – Listpicker错误SelectedItem必须始终设置为有效的值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1260190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存