2016-11-09 2 views
0

У меня есть наблюдаемые коллекции:Удалить объект из ObservableCollection, щелкнув элемент в GridView C#

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. Есть ли эффективный способ сделать это?

Благодаря

ответ

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 Свойство, установленное в true, если вы выберете его в своем GridView.

3) Теперь удаление Icons из вашей Observable Collection только может быть сделано с помощью

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

Вы можете вызвать эту функцию с помощью events или через Command привязки к кнопке.

Смежные вопросы