如何查看listview上的所有复选框?
Listview xaml:
<ListView x:Name="List" HorizontalAlignment="Left" Height="559" Margin="10,10,0,0" VerticalAlignment="Top" Width="607" Grid.ColumnSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Auto" IsMouseCapturedChanged="List_IsMouseCapturedChanged">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Name="Dodaj" Header="Dodaj" Click="DodajUtwor_Click"/>
<MenuItem Name="Usuń" Header="Usuń Zaznaczone" Click="UsuńUtwór_Click"/>
<MenuItem Name="Clear" Header="Wyczyść Listę" Click="ClearList_Click"/>
<MenuItem Name="Check" Header="Zaznacz Wszystkie" Click="SelectAll_Click"/>
</ContextMenu>
</ListView.ContextMenu>
<ListView.View>
<GridView>
<GridViewColumn Width="30" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Name="CheckBox" Padding="10" IsChecked="{Binding IsChecked}"/>
<TextBlock Text="{Binding Data}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Nazwa Pliku" Width="100" DisplayMemberBinding="{Binding Nazwa}" />
<GridViewColumn Header="Tytuł" Width="100" DisplayMemberBinding="{Binding Tytuł}"/>
<GridViewColumn Header="Wykonawca" Width="100" DisplayMemberBinding="{Binding Autor}"/>
<GridViewColumn Header="Album" Width="100" DisplayMemberBinding="{Binding Album}"/>
<GridViewColumn Header="Nr" Width="100" DisplayMemberBinding="{Binding Nr}"/>
<GridViewColumn Header="Rok" Width="100" DisplayMemberBinding="{Binding Rok}"/>
<GridViewColumn Header="Gatunek" Width="100" DisplayMemberBinding="{Binding Gatunek}"/>
<GridViewColumn Header="Komantarze" Width="100" DisplayMemberBinding="{Binding Komentarze}"/>
<GridViewColumn Header="Okładka" Width="100" DisplayMemberBinding="{Binding Okładka}"/>
<GridViewColumn Header="Lokalizacja" Width="100" DisplayMemberBinding="{Binding Lokalizacja}"/>
</GridView>
</ListView.View>
</ListView>
代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
MyItem selectedItem = (MyItem)this.List.SelectedItem;
selectedItem.IsChedked = true;
List.Items.Refresh();
}
不要工作。 我想在listviev中更改true的所有复选框。我不知道如何使用循环foreach。以及如何删除项目复选框上的true?
答案 0 :(得分:0)
我猜你可能会在标题栏中找一个复选框,并在选中标题复选框时选择所有网格项。
我们可以通过简单的子/子视图模型来做到这一点。下面的代码可能有助于/解决您的问题。
Xaml /查看代码 -
<GridViewDataColumn DataMemberBinding="{Binding IsChecked}" >
<GridViewDataColumn.Header >
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewDataControl}}
,Path=DataContext.CheckAll}"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewDataControl}}
,Path=DataContext.CheckAllCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" />
</GridViewDataColumn.Header>
<GridViewDataColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Name="CheckBox" Padding="10" IsChecked="{Binding IsChecked}" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewDataControl}}
,Path=DataContext.ItemCommand}" CommandParameter="{Binding}"/>
<TextBlock Text=y"{Binding Data}"/>
</StackPanel>
</DataTemplate>
</GridViewDataColumn.CellTemplate>
</GridViewDataColumn>
您可以按照以下说明使用您的视图模型。
class MainViewModel : Common.UserInterface.ViewModelBase, IDisposable
{
public MainViewModel()
{
CheckAllCommand = new DelegateCommand<bool>(OnCheckAllExecuted);
}
void OnCheckAllExecuted(bool status)
{
// Your logic goes here (if any)
CheckAll = items.All(item => item.IsChecked);
}
public DelegateCommand<ItemViewModel> ItemCommand { get; private set; }
private bool checkAll;
private ObservableCollection<ItemViewModel> items;
public DelegateCommand<bool> CheckAllCommand
{
get;
private set;
}
public ObservableCollection<ItemViewModel> Items
{
get
{
return items;
}
set
{
items = value;
OnPropertyChanged(() => Items);
}
}
public bool CheckAll
{
get { return checkAll; }
set
{
checkAll = value;
OnPropertyChanged(() => CheckAll);
}
}
}
class ItemViewModel : ViewModelBase
{
public bool ischecked;
public string data;
public new bool IsChecked
{
get { return isChecked; }
set
{
isChecked = value;
OnPropertyChanged("IsChecked");
}
}
public string Data
{
get { return data; }
set
{
data = value;
OnPropertyChanged("Data");
}
}
}