项目有目录,输出是通过DataGrid进行的。有时在这些目录中删除了某些内容,但程序逻辑根本不会删除它们,而是将它们标记为已删除。一个简单的用户只需要显示目录项的列表,但管理员组的用户需要显示项目的主列表和已删除的项目。在这种情况下,必须标记已删除的(作为带有颜色的选项)。此代码不起作用
这是 DataGridRow 的样式代码
<style TargetType="{x:Type DataGridRow}" x:Key="ReferencesDataGridRow">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding DataContext.IsAdmin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}" Value="false" />
<Condition Binding="{Binding Path=Deleted}" Value="true" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding DataContext.IsAdmin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}" Value="true" />
<Condition Binding="{Binding Path=Hidden}" Value="true" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Pink" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
在 UserControl 标记中,必须通过 UserControl 资源应用样式,因为直接在 DataGrid 中设置 DataGridRow 样式会导致 ArgumentNullException 错误
<UserControl.Resources>
<Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource ReferencesDataGridRow}" />
</UserControl.Resources>
数据网格
<DataGrid x:Name="VendorsGrid" ItemSource="{Binding VendorsList}" SelectedItem="{Binding SelectedVendor}">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
绑定在 .cs 文件 UserControl 中完成
DataContext=MainWindowViewModel.This.CurrentDocument;
有问题的 UserControl 的 ViewModel
...
public bool IsAdim=>UserConfig.IsAdmin;
public VendorModel SelectedVendor
{
get=>_selectedVendor;
set=>Set(ref _selectedVendor,value);
}
public ObservableCollection<VendorModel>VendorList{get;}
...
样式不会以任何方式应用于 DataGrid
实际上问题是:标记有什么问题,为什么不想将样式应用于 DataGrid?
ps Set() 方法实现了@VladID 建议的 INotifyPropertyChanged 接口
谢谢
在实验过程中,我发现通过 DataGrid.RowStyle 应用样式效果很好。也许它对我有用,但结果是