DataGrid RowStyle - DataTrigger 中的绑定值

Posted

技术标签:

【中文标题】DataGrid RowStyle - DataTrigger 中的绑定值【英文标题】:DataGrid RowStyle - Binding Value in DataTrigger 【发布时间】:2017-08-07 22:10:38 【问题描述】:

我想构建一个 RowStyle,它会根据两个条件 (OR) 更改行的 Visibility

默认情况下,无论布尔值(在 ViewModel 中)设置为 True 还是绑定到 DatagridDataTable 中的值等于当前用户,所有行都应折叠并可见。所以,当前用户当然也是一个属性。

<DataGrid.RowStyle>
    <Style TargetType="x:Type DataGridRow">
        <Setter Property="Visibility" Value="Collapsed" />
        <Style.Triggers>
            <DataTrigger Binding="Binding RelativeSource=RelativeSource AncestorType=x:Type Window,Mode=FindAncestor,Path=DataContext.ColleaguesVisible" Value="True">
                <Setter Property="Visibility" Value="Visible" />
            </DataTrigger>
            <DataTrigger Binding="Binding CreatingUser" Value="Binding CurrentStaffMember">
                <Setter Property="Visibility" Value="Visible" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>

但是在值绑定处有错误...

我已经四处寻找,但找不到解决此问题的方法。

我希望有人可以帮助我。

【问题讨论】:

【参考方案1】:

不能Value 属性绑定到DataTrigger 到某个东西,因为它不是依赖属性。

你可以做的是使用转换器:

<DataGrid ... x:Name="dgr" xmlns:local="clr-namespace:WpfApp2">
    <DataGrid.Resources>
        <local:Converter x:Key="conv" />
    </DataGrid.Resources>
    <DataGrid.RowStyle>
        <Style TargetType="x:Type DataGridRow">
            <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="Binding RelativeSource=RelativeSource AncestorType=x:Type Window,Mode=FindAncestor,Path=DataContext.ColleaguesVisible" Value="True">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
                <DataTrigger Binding="Binding Path=., Converter=StaticResource conv" Value="True">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

namespace WpfApp2

    public class Converter : IValueConverter
    
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        
            DataRowView drv = value as DataRowView;
            if(drv != null)
            
                return drv["CreatingUser"].ToString() == drv["CurrentStaffMember"].ToString();
            
            return false;
        

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        
            throw new NotImplementedException();
        
    

【讨论】:

谢谢,正是我需要的。不管怎样,我把Userstuff移到了DataRowView.Filter,但在我还需要的Buttons中使用了这个。【参考方案2】:

“CreatingUser”在哪里?在 DataContext(your item) 行中,还是在 DataGrid 后面的 ViewModel 中,或者在 Window 后面的 ViewModel 中?

也许这是你的问题?

【讨论】:

以上是关于DataGrid RowStyle - DataTrigger 中的绑定值的主要内容,如果未能解决你的问题,请参考以下文章

Wpf DataGrid RowStyle 如何使用图像或画笔作为背景

DataGrid RowStyle - DataTrigger 中的绑定值

所选行的 WPF DataGrid RowStyle 不改变背景和前景色

有条件地转换 RowStyle 值

删除所有 DataGrid 行和单元格边框

求教easyui datagrid如何动态生成列