通过listview中的SelectedItem编辑ObservableCollection中对象的成员

时间:2017-05-29 20:33:15

标签: c# wpf listview

这是我在WPF的第一个项目,目前我被困在购物车上。 我创建了一个对象newbasketItem,其成员ItemQuantity的值为“1”。我的listview通过Binding完美地运行。我可以添加项目,删除项目和清除我的收藏。现在我的问题: 我想在视图列表中选择一个项目,并使用按钮递增ItemQuantity。

有没有办法在ItemQuantity添加到集合时编辑它?

BasketItem newBasketItem = new BasketItem();
newBasketItem.ItemQuantity = 1;

basketitems.Add(newBasketItem);

newBasketItem是我的ObservableCollection。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的BasketItem课程应实施INotifiedPropertyChange界面,并且listview内容将自动更新(前提是您对ItemQuantity具有约束力。)

例如:

public class BasketItem : INotifyPropertyChanged
{
    private int quantity = 0;

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public int ItemQuantity
    {
        get
        {
            return this.quantity;
        }

        set
        {
            if (value != this.quantity)
            {
                this.quantity = value;
                NotifyPropertyChanged();
            }
        }
    }
}

ObservableCollection已经实现了此接口,但这还不够,因为它只允许在添加,删除或移动项目时触发事件。但是,如果您希望在修改项目时通知UI,则此项目还必须实现INotifyPropertyChanged接口。

关于您的点击事件,您应该使用@Sir Rufo建议的ICommand。您还可以使用以下XAML执行以下操作:

<ListView ItemsSource="{Binding Items}" IsItemClickEnabled="True" ItemClick="ListView_ItemClick" Margin="0,50,0,0" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding ItemQuantity}" />
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>

并在您的代码中:

private void ListView_ItemClick(object sender, ItemClickEventArgs e)
{
    var item = e.ClickedItem as BasketItem;
    item.ItemQuantity++;
}