【问题标题】:Get element from selected listview row从选定的列表视图行中获取元素
【发布时间】:2023-03-08 15:40:02
【问题描述】:
我在 Xamarin.Forms 中有一个使用数据绑定的 ListView。我正在使用获取当前索引的 ItemSelected 事件。我想获取所选 ListView 行的价格属性。使用 Tracepoint,我看到了 e => SelectedItem => Price 中的值。
如何将其保存到变量中?我试过了:
double val = e.SelectedItem.Price;
但是,这不起作用。
“object”不包含“Price”的定义,并且找不到接受“object”类型的第一个参数的可访问扩展方法“Price”。
我想将所选 ListView 行的价格存储到一个变量中。谢谢你。
【问题讨论】:
标签:
c#
listview
xamarin.forms
【解决方案1】:
由于您使用了数据绑定,您应该处理 ViewModel 中的所有逻辑。
<ListView ItemsSource="{Binding xxx}" SelectedItem="{Binding SelectItem,Mode=TwoWay}" >
...
在视图模型中
public class YourViewModel :INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private YourModel selectItem;
public YourModel SelectItem
{
get
{
return selectItem;
}
set
{
if (selectItem!= value)
{
selectItem= value;
NotifyPropertyChanged();
double val = selectItem.Price;
// do some thing you want here
}
}
}
//...
}
在您的情况下,Price 是模型的属性,而不是 SelectedItem 的属性。或者您可以改进您的代码,如下所示。但正如我所说,使用 MVVM 更好。
var SelectItem = e.SelectedItem as YourModel;
double val = SelectItem .Price;