如何制作CheckEdit
全选。
Xaml自动生成checkEdit
<ItemsControl ItemsSource="{Binding MyProperty, Mode=TwoWay}" Margin="0" Grid.Column="1" Grid.RowSpan="1" x:Name="MyCheck" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<dxe:CheckEdit Content="{Binding FilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Padding="2.5" Margin="3"
IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Button x:Name="filtrButton" Content="Filtr" Command="{Binding FiltrCommand}" Padding="5" Margin="3" IsEnabled="{Binding IsEnabled}"/>
<dxe:CheckEdit x:Name="CheckALL" Content="Select All" Padding="2.5" Margin="3" IsChecked="{Binding AllSelected}" />
C#
private bool? _allSelected = true;
public bool? AllSelected
{
get { return _allSelected; }
set
{
_allSelected = value;
MyProperty.ForEach(x => x.IsChecked = value);
OnPropertyChange("AllSelected");
}
}
public List<MyCheckBox> MyProperty
{
get { return TempList; }
set
{
TempList = value;
OnPropertyChange("MyProperty");
}
}
/// добавление название файла и его select
public ViewModel(){
TempList = new List<MyCheckBox>();
foreach (var type in tempUniqueList)
{
TempList.Add(new MyCheckBox(type, _allSelected));
}
MyProperty = TempList;
}
答案 0 :(得分:0)
_allSelected是不必要的,因为它的状态来自是否检查其他项目。 (注意:这与选择不同,这意味着ItemsControls中的其他内容)
public bool? AllSelected
{
get
{
// Check if all are checked
if (!MyProperty.Any(x => !x.IsChecked))
{
return true;
}
// Check if none are checked
if (!MyProperty.Any(x => x.IsChecked))
{
return false;
}
// Otherwise some are checked.
return null;
}
set
{
_allSelected = value;
MyProperty.ForEach(x => x.IsChecked = value);
OnPropertyChange("AllSelected");
}
}
现在,另一个重要的事情是,每当其中一个项目的IsChecked()值发生更改时,您需要引发 OnPropertyChanged(&#34; AllSelected&#34;)。在这一点上,这不是一个非常好的解决方案。您需要为插入到&#34; MyProperty&#34;中的每个项目挂钩PropertyChanged事件,测试它是否是 IsChecked 属性,如果是,则引发PropertyChanged。
就个人而言,我倾向于将此类事物视为View的更多部分,而不是View Model。我的意思是,&#34;选择全部/选择无&#34;复选框实际上是ItemsControl的扩展,从概念上讲。因此,您可能完全有理由在代码隐藏中执行此操作,并且只是连接到DataTemplate中的Checked()事件。