如何解决当 ListView 行包含 Expander 时,ListView ItemTapped / ItemSelect 不会触发
我最初的想法是当我点击 InvoiceLine 时,Expander 正文中的标签数据应相应更改。因此,当我单击该行时,ItemTapped 会聊天 ItemSelected 对象并将其传递给 viewmodel,其中 InvoiceLine 属性的 set 方法更改标签的数据。但是,当我点击扩展器时,ItemTapped(和 ItemSelect)不会触发,只有当我在列表视图行中的扩展器外部单击时才触发。
我也无法使用 Expander 的“Tapped”事件,因为我无法从列表视图中提取 InvoiceLine 数据。
我的 XAML 代码:
<ListView ItemsSource="{Binding Invoice.LineItems}" Margin="10" ItemTapped="ListView_ItemTapped" ItemSelected="ListView_ItemSelected" HasUnevenRows="true">
<ListView.Header>
<Grid ColumnDeFinitions="4*,*">
<Label Text="Tétel neve" Grid.Column="0"/>
<Label Text="Nettó érték" Grid.Column="1"/>
</Grid>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Expander Margin="0,10">
<Expander.Header>
<Grid ColumnDeFinitions="4*,*">
<Label Text="{Binding ItemData}" Grid.Row="0" Grid.Column="0"/>
<Label Text="{Binding NetValue}" Grid.Row="0" Grid.Column="1"/>
</Grid>
</Expander.Header>
<StackLayout>
<Label Text="{Binding E_QuantityUnit}"/>
<Label Text="{Binding E_UnitPrice}"/>
<Label Text="{Binding E_VATCode}"/>
<Label Text="{Binding E_NetValue}"/>
<Label Text="{Binding E_VATValue}"/>
<Label Text="{Binding E_GrossValue}"/>
</StackLayout>
</Expander>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的观点:
public InvoiceDetailPage(Invoice invoice,int direction)
{
InitializeComponent();
((InvoiceDetailviewmodel)this.BindingContext).Invoice = invoice;
}
private void ListView_ItemTapped(object sender,ItemTappedEventArgs e)
{
InvoiceLine line = e.Item as InvoiceLine;
((InvoiceDetailviewmodel)this.BindingContext).SelectedLine = line;
}
private void ListView_ItemSelected(object sender,selecteditemchangedEventArgs e)
{
InvoiceLine line = e.SelectedItem as InvoiceLine;
((InvoiceDetailviewmodel)this.BindingContext).SelectedLine = line;
}
还有我的 viewmodel:
private Invoice _invoice;
public Invoice Invoice
{
get { return _invoice; }
set
{
_invoice = value;
OnPropertyChanged();
}
}
private InvoiceLine _selectedLine;
public InvoiceLine SelectedLine
{
get { return _selectedLine; }
set
{
_selectedLine = value;
E_QuantityUnit = value.Quantity + " " + value.Unit;
E_UnitPrice = value.UnitPrice + " " + Invoice.Currency;
E_NetValue = value.NetValue + " " + Invoice.Currency;
E_VATValue = value.VATValue + " " + Invoice.Currency;
E_GrossValue = value.GrossValue + " " + Invoice.Currency;
int tr = 0;
if (int.TryParse(value.VATCode,out tr))
E_VATCode = value.VATCode + "%";
else
E_VATCode = value.VATCode;
}
}
private string _quantityUnit;
public string E_QuantityUnit
{
get { return _quantityUnit; }
set { _quantityUnit = value; OnPropertyChanged(); }
}
private string _unitPrice;
public string E_UnitPrice
{
get { return _unitPrice; }
set { _unitPrice = value; OnPropertyChanged(); }
}
private string _netValue;
public string E_NetValue
{
get { return _netValue; }
set { _netValue = value; OnPropertyChanged(); }
}
private string _vatValue;
public string E_VATValue
{
get { return _vatValue; }
set { _vatValue = value; OnPropertyChanged(); }
}
private string _grossValue;
public string E_GrossValue
{
get { return _grossValue; }
set { _grossValue = value; OnPropertyChanged(); }
}
private string _vatCode;
public string E_VATCode
{
get { return _vatCode; }
set { _vatCode = value; OnPropertyChanged(); }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。