通过单击GridView C#中的项目从ObservableCollection中删除对象

时间:2016-11-09 13:11:19

标签: c# xaml gridview observablecollection

我有一个可观察的集合:

private ObservableCollection<Icon> MyContactInst;

该集合包含一些通过添加按钮和删除按钮实时更改的对象。

我在GridView中查看对象:

<GridView Name="GridView2" Grid.Row="2" ItemsSource="{x:Bind MyContactInst}"
              IsItemClickEnabled="True"
              ItemClick="GridView2_ItemClick">
        <GridView.ItemTemplate>
            <DataTemplate x:DataType="data:Icon">
                <StackPanel Orientation="Vertical">
                    <Image Width="65" Source="{x:Bind IconImagePath}"/>
                    <TextBlock FontSize="16" Text="{x:Bind FullName}"/>
                    <TextBlock FontSize="10" Text="{x:Bind Age}"/>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

我想单击GridView中的一个对象,然后单击“删除”按钮将其从集合和GridView中删除。有没有有效的方法呢?

由于

1 个答案:

答案 0 :(得分:2)

实现您想要的东西需要多种东西:

1)将类型为bool的公共属性添加到类Icon。类Icon还需要实现INotifyPropertyChanged接口。您可以在此处找到教程:https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.95).aspx

您需要添加的代码如下所示:

private bool isSelected; 


public bool IsSelected
{
   get 
   {
      return isSelected;
   }
   set 
   {
      isSelected = value;
      OnPropertyChanged("IsSelected");
   }    
}

2)通过XAML绑定到该值:

<GridView.RowStyle>                 
     <Style TargetType="{x:Type GridViewRow}">                              
           <Setter Property="IsSelected" Value="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"/>                 
     </Style>             
</GridView.RowStyle>

到目前为止,我们取得的成就是Icon中的每个GridView(在您的Icons中重复所有Observable Collection)都会设置IsSelected属性集如果您在GridView中选择它,则为true。

3)现在从Icons删除Observable Collection只能通过

完成
public void RemoveIcon()
{
    foreach (int i = MyContactInst.Count-1; i >= 0 ; i--)
    {
        if (icon.IsSelected == true)
        {
            MyContactInst.Remove(icon);
        }
    }
 }

您可以通过eventsCommand绑定到按钮来触发此功能。