【问题标题】:Remove Item in Listview删除列表视图中的项目
【发布时间】:2021-09-15 00:07:35
【问题描述】:

我创建了一个列表视图并将组合框和按钮控件添加到列表视图中,并在此视图中添加了一个用于删除项目的按钮。单击列表视图中的“删除”按钮而不单击该行时,我需要删除 Listview 项目。

 <ListView Name="listView">            
        <ListView.View>
            <GridView>
                <GridViewColumn Header="SlNo" Width="40">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtSlno" Width="35" Text="{Binding slno}" />                                       
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Bar Code" Width="120">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox x:Name="cmbBarcode" IsEditable="True" Width="110" Text="{Binding barcode}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Item Name" Width="250">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox x:Name="txtitemname" IsEditable="True" Width="240" Text="{Binding itemname}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Qty" Width="65">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtqty" Width="65" Text="{Binding qty}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Unit" Width="65">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtunit" Width="60" Text="{Binding unit}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Rate" Width="90">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtrate" Width="85" Text="{Binding rate}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Disc %" Width="80">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtdiscp" Width="75" Text="{Binding discp}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Disc" Width="80">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtdisc" Width="75" Text="{Binding disc}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Net Amount" Width="130">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtnetamount" Width="125" Text="{Binding netamount}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="MRP" Width="130">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="txtmrp" Width="125" Text="{Binding mrp}" PreviewKeyDown="txtmrp_PreviewKeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Remove" Width="70">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button x:Name="btnRemove" Content="Remove" Width="60" BorderThickness="0" CommandParameter="{Binding}" HorizontalContentAlignment="Right"  Cursor="Hand" Foreground="Blue" Click="btnEdit_Click"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <Border CornerRadius="2" SnapsToDevicePixels="True"
                            BorderThickness="{TemplateBinding     BorderThickness}" 
                            BorderBrush="{TemplateBinding BorderBrush}" 
                            Background="{TemplateBinding Background}">
                                <Border Name="InnerBorder" CornerRadius="1"   BorderThickness="1">
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition MaxHeight="11" />
                                            <RowDefinition />
                                        </Grid.RowDefinitions>
                                        <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" />
                                        <GridViewRowPresenter Grid.RowSpan="2" 
                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                    </Grid>
                                </Border>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="Background" Value="LightBlue"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>

c#代码如下

private void btnEdit_Click(object sender, RoutedEventArgs e)
{
   listView.Items.RemoveAt(listView.SelectedIndex);
}

第一次单击列表视图项目然后单击删除按钮时它可以正常工作。我需要单击删除按钮移动项目

【问题讨论】:

  • 显示您的填充方式。而且我们不需要查看问题的所有列。

标签: wpf


【解决方案1】:

如果您使用绑定,这就是让 DataContext 从源中删除行的方式

Button btn = (Button)sender;
SearchItem srchItem = (SearchItem)btn.DataContext;

【讨论】:

    【解决方案2】:

    我使用 ICommand 而不是按钮单击事件,因为我想将 Command 放在父视图模型中而不是代码隐藏中,但无论如何我都会分享,因为它对我有用并且可能对你有所帮助。

    我有Command="{Binding ParentViewModel.btnEditCommand",而不是Click="btnEdit_Click"。 (我也和你一样有CommandParameter="{Binding}"。)

    然后在ParentViewModel中,名为“MyViewModel”:

    public ObservableCollection<ListItemsViewModel> ListItems
        {
            get;
            set;
        }
    
    public MyViewModel()
    {
        btnEditCommand = new RelayCommand<object>(btnEditCommand_Do, btnEditCommand_Can);
    }
    
    public ICommand btnEditCommand
    {
        get; 
        set;
    }
    
    public bool btnEditCommand_Can( object param )
    {
        return true;
    }
    
    public void btnEditCommand_Do( object param )
    {
        ListItems.Remove( param as ListItemsViewModel );
    }
    

    最后,上面引用的 ListItemsViewModel 继承自与 MyViewModel 继承自同一个父级。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      // 试试这个代码

       String txt = ((TextView)view).getText().toString();
       adapter.remove(txt);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        相关资源
        最近更新 更多