如何在DataGridRow.CellStyle中访问DataGrid ItemsSource对象的属性?

时间:2017-07-20 11:42:46

标签: c# wpf xaml binding datagrid


首先,让我告诉你我的课程:

public class Model
{
    public Model Parent {get; set;}
    public ObservableCollection<Model> Childs {get; set;}
    public ObservableCollection<Partner> Partners {get; set;}
    public bool IsTopElement => Parent == null;
}

public class Partner
{
    public bool IsActive {get; set;}
    public string PartnerRole {get; set;}
    public bool IsCustomer => PartnerRole == "Customer"
}

如您所见,Model是一个层次结构,因为它可以有父项和子项列表。我有一个UserControl,其DataContext设置为Model的实例。在这个UserControl中,我有一个DataSrid,其ItemsSource绑定到Partners。在这个DataGrid中,我有一个DataGridCheckBoxColumn,它绑定到IsActive对象的Partner属性和几个DataGridTextColumns。 我想要实现的是,如果当前Model对象不是顶部元素(没有父元素),则所有IsActive - 属于Partner条目{{1}的复选框单元格应禁用。
我尝试了以下XAML代码:

IsCustomer == True

我现在面临的问题是,我无法在MultiDataTrigger的第二个条件中访问DataGrid中<UserControl DataContext="{Binding Model}"> <DataGrid ItemsSource="{Binding Partners}" AutoGenerateColumns="False" CanUserResizeRows="False" CanUserAddRows="False" CanUserDeleteRows="False" RowDetailsVisibilityMode="VisibleWhenSelected"> <DataGrid.Columns> <DataGridCheckBoxColumn Binding="{Binding IsActive}"> <DataGridCheckBoxColumn.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Model.IsTopElement}" Value="False"/> <Condition Binding="{Binding ???}"/> <!-- I'd have expected Binding="{Binding IsCustomer}" Value="True" to work, but it doesn't--> </MultiDataTrigger.Conditions> <Setter Property="IsEnabled" Value="False"/> </MultiDataTrigger> </Style.Triggers> </Style> </DataGridCheckBoxColumn.CellStyle> </DataGridCheckBoxColumn> </DataGrid.Columns> </DataGrid> </UserControl> 对象的属性IsCustomer。那么如何在那里访问这个属性呢?此外,我没想到在第一个条件中访问Partner IsTopElement属性,因为DataGrid的ItemsSource绑定到Model但显然我有,这是相当混乱的对我来说 任何帮助将非常感激。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

DataContext的{​​{1}}是DataGridCell个对象。您可以使用Partner绑定到父{RelativeSource}的{​​{1}}。试试这个:

UserControl