C# ve WPF kullanıyorum ve ilk sütunda bir CheckBox'la öğeleri barındıran bir ListView'im var. ListView'in ItemsSource kodu (kod ile değil) olarak ayarlanır ve 'Name', 'Type' ve 'Selected' özelliklerine sahip bir 'Item' sınıfının örneklerini içerir.Gruplandırılmış öğelerle birlikte ListView - grup üstbilgisi yoluyla tüm grup üyelerini seçin onay kutusu
public class Item : INotifyPropertyChanged
{
private string _name;
private bool _selected;
private string _type;
public string Name
{
get { return _name; }
set
{
_name = value;
this.OnPropertyChanged();
}
}
public bool Selected
{
get { return _selected; }
set
{
_selected = value;
this.OnPropertyChanged();
}
}
public string Type
{
get { return _type; }
set
{
_type = value;
this.OnPropertyChanged();
}
}
protected virtual void OnPropertyChanged([CallerMemberName] string property = "")
{
if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(property));
}
public event PropertyChangedEventHandler PropertyChanged;
}
ListView Görünüm ilk sütuna Seçilen özelliğine bağlı bir onay kutusu ile bir GridView ayarlanır - onay kutusunun mesela 'seçilen' ediliyor yapılmadığını gösterir.
Bu ListView grubuna gruplama ekliyorum ('Type' grubuna göre gruplandırılmış) ve GroupStyle da bir CheckBox içeriyor. Sorumun Nihayet üzerine
<ListView x:Name="listview">
<!-- View -->
<ListView.View>
<GridView>
<GridViewColumn Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="cls:Item">
<CheckBox IsChecked="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="300" Header="Name" DisplayMemberBinding="{Binding Name, UpdateSourceTrigger=PropertyChanged}"></GridViewColumn>
<GridViewColumn Width="100" Header="Type" DisplayMemberBinding="{Binding Type}"></GridViewColumn>
</GridView>
</ListView.View>
<!-- Group style -->
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<CheckBox></CheckBox>
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding ItemCount, StringFormat='- {0} item(s)'}" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
: ne olmasını istiyorum grubunda CheckBox kullanabilmek için olmaktır
var lst = new List<Item>();
lst.Add(new Item { Name = "A", Type = "1" });
lst.Add(new Item { Name = "B", Type = "1" });
lst.Add(new Item { Name = "C", Type = "1" });
lst.Add(new Item { Name = "A", Type = "2" });
lst.Add(new Item { Name = "B", Type = "2" });
lst.Add(new Item { Name = "C", Type = "2" });
listview.ItemsSource = lst;
var view = CollectionViewSource.GetDefaultView(lst);
view.GroupDescriptions.Add(new PropertyGroupDescription("Type"));
ListView XAML GridView ve GroupStyle içeriyor İlgili gruptaki öğelerin tümünü veya hiçbirini seçmek için üstbilgi.
onlar henüz seçili değilse, söz konusu grubun tüm öğeleri seçmek gerekir grup başlığı onay kutusunu tıkladığınızda Örneğin:. Tekrar tıklamak, o gruptaki tüm öğeleri seçip (işaretsiz) kaldırmalıdır. Kullanıcı bir gruptaki bazı öğeleri manuel olarak seçer veya seçimini kaldırırsa, grup başlığı onay kutusunun belirsiz bir durum göstermesi iyi olur, ancak işaretlenmemiş olması da iyi olur.
Bununla nereden başlayacağımı bilmiyorum. Grup üstbilgisinin IsChecked özelliğini bağlamanız gerektiğine inanıyorum, ancak ne hakkında bilgi vereceğimi bilemiyorum, çünkü datacontext, grup hakkında hiçbir bilgi içermeyen bir GroupDescriptor olayıdır. o grupta hangi maddeler var (sağda?).
Kesinlikle MVVM'yi takip etmiyorum, bu yüzden tüm bağlantılarda ve görüntüleme modumda yaptığım için endişelenmiyorum, onay kutusunun Checked olayını dinlemek gibi bir şeyle iyi olurdum ve bir şekilde hangi öğelerin kod içinde olduğunu fark ederdim kontrol edilmelidir. Örneğin; Checked olayını dinleyebilir ve bir şekilde grubun türünü ayıklayabilirsem, çoğunlukla set olurdu (tüm listeden geçebilir ve eşleşen gruba sahip olanları seçebilirdim). Ama bunu yapmanın bir yolunu bile görmüyorum; CheckBox olayını Checked olayında (gönderen) alabilirim ve tüm ana kontrollere geçebilirim ama hiçbir yerde gruplandırma yaptığım özellik hakkında hiçbir bilgi göremiyorum ...
Any yardım harika olurdu!
Ama gruptaki öğeleri nasıl alabilirim? Gruplandırdığım mülkün değerini bilmem ya da grup öğelerini başka yollarla öğrenmem gerekiyor ve bunları elde etmenin bir yolunu bulamıyorum. –