如何从 ObservableCollection 中删除所有选定的项目
How to remove all selected items from an ObservableCollection
我试图在单击另一个 XAML 中的按钮时从 ObservableCollection 中删除所有选定的项目,我不确定如何在我的系统中实现它。我用这个例子来指导我 - RemoveAll for ObservableCollections?
下面是我的代码:
Basket.xaml 其中包含 observablecollection
private static ObservableCollection<Menu.PassedData> passedData = new ObservableCollection<Menu.PassedData>();
public ObservableCollection<Menu.PassedData> PassedData
{
get { return passedData; }
//get{ passedData = value; }
bool IsSelected = true;
}
购物篮中的列表视图
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="270" Margin="10,170,0,0" VerticalAlignment="Top" Width="125" IsSynchronizedWithCurrentItem="False" SelectionChanged="listBox_SelectionChanged">
<ListView Name ="myListView" ItemsSource="{Binding PassedData}" HorizontalAlignment="Left" VerticalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Column="0" Text="{Binding Name}" IsReadOnly="True" FontSize="15" />
<TextBox x:Name="quanttextBox" HorizontalAlignment="Left" Height="25" Margin="155,175,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="95" TextChanged="quanttextBox_TextChanged"/>
<!--<TextBox Grid.Column="1" Text="{Binding Value}" /> !-->
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ListBox>
Confirm.xaml是包含删除所有项目按钮的页面
public static class ObservableCollectionExtensions
{
public static void RemoveAll<T>(this ObservableCollection<T> collection,
Func<T, bool> condition)
{
for (int i = collection.Count - 1; i >= 0; i--)
{
if (condition(collection[i]))
{
collection.RemoveAt(i);
}
}
}
}
按钮本身
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
Menu.PassedData.RemoveAll(data => data.IsSelected == true);
Frame.Navigate(typeof(MainPage));
}
Menu.PassedData
public event SelectionChangedEventHandler SelectionChanged;
public class PassedData
{
public string Name { get; set; }
public double Value { get; set;}
bool IsSelected = true;
internal static void RemoveAll(Func<object, bool> p)
{
throw new NotImplementedException();
}
}
错误
您的 Remove 语句 c.Remove(x => x.c)
没有提供您在扩展中定义的 lambda 表达式。你应该写类似
c.Remove(x => x.c == trueStatement)
您应该在 Menu.PassedData
中有一个名为 IsSelected
的布尔值 属性。
使用 SelectionChangedEvent
选择列表视图项时,使 属性 为真
private void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.AddedItems)
{
(item as Menu.Passed).Selected=true
}
}
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
PassedData.RemoveAll(data => data.IsSelected == true);
}
public class PassedData
{
public string Name { get; set; }
public double Value { get; set;}
public bool IsSelected{get;set;}
}
我试图在单击另一个 XAML 中的按钮时从 ObservableCollection 中删除所有选定的项目,我不确定如何在我的系统中实现它。我用这个例子来指导我 - RemoveAll for ObservableCollections?
下面是我的代码:
Basket.xaml 其中包含 observablecollection
private static ObservableCollection<Menu.PassedData> passedData = new ObservableCollection<Menu.PassedData>();
public ObservableCollection<Menu.PassedData> PassedData
{
get { return passedData; }
//get{ passedData = value; }
bool IsSelected = true;
}
购物篮中的列表视图
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="270" Margin="10,170,0,0" VerticalAlignment="Top" Width="125" IsSynchronizedWithCurrentItem="False" SelectionChanged="listBox_SelectionChanged">
<ListView Name ="myListView" ItemsSource="{Binding PassedData}" HorizontalAlignment="Left" VerticalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Column="0" Text="{Binding Name}" IsReadOnly="True" FontSize="15" />
<TextBox x:Name="quanttextBox" HorizontalAlignment="Left" Height="25" Margin="155,175,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="95" TextChanged="quanttextBox_TextChanged"/>
<!--<TextBox Grid.Column="1" Text="{Binding Value}" /> !-->
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ListBox>
Confirm.xaml是包含删除所有项目按钮的页面
public static class ObservableCollectionExtensions
{
public static void RemoveAll<T>(this ObservableCollection<T> collection,
Func<T, bool> condition)
{
for (int i = collection.Count - 1; i >= 0; i--)
{
if (condition(collection[i]))
{
collection.RemoveAt(i);
}
}
}
}
按钮本身
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
Menu.PassedData.RemoveAll(data => data.IsSelected == true);
Frame.Navigate(typeof(MainPage));
}
Menu.PassedData
public event SelectionChangedEventHandler SelectionChanged;
public class PassedData
{
public string Name { get; set; }
public double Value { get; set;}
bool IsSelected = true;
internal static void RemoveAll(Func<object, bool> p)
{
throw new NotImplementedException();
}
}
错误
您的 Remove 语句 c.Remove(x => x.c)
没有提供您在扩展中定义的 lambda 表达式。你应该写类似
c.Remove(x => x.c == trueStatement)
您应该在 Menu.PassedData
中有一个名为 IsSelected
的布尔值 属性。
使用 SelectionChangedEvent
private void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.AddedItems)
{
(item as Menu.Passed).Selected=true
}
}
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
PassedData.RemoveAll(data => data.IsSelected == true);
}
public class PassedData
{
public string Name { get; set; }
public double Value { get; set;}
public bool IsSelected{get;set;}
}