微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 ListView 行包含 Expander 时,ListView ItemTapped / ItemSelect 不会触发

如何解决当 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 举报,一经查实,本站将立刻删除。