C# 如何访问DataGridRow.CellStyle中DataGrid ItemsSource对象的属性?
C# 如何访问DataGridRow.CellStyle中DataGrid ItemsSource对象的属性?,c#,wpf,xaml,binding,datagrid,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 == n
首先,让我向您展示我的课程:
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"
}
我现在面临的问题是,在MultiDataTrigger的第二个条件下,我无法访问DataGrid中Partner
对象的属性IsCustomer
。那么我怎样才能访问那里的这个属性呢?另外,在第一种情况下,我不希望访问Model
的IsTopElement
属性,因为DataGrid的ItemsSource绑定到Partners
,但显然我有,这让我很困惑。任何帮助都将不胜感激。如果您需要更多信息,请告诉我。
DataGridCell
的DataContext
是一个合作伙伴
对象。您可以使用{RelativeSource}
绑定到父UserControl
的DataContext
。试试这个:
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding DataContext.IsTopElement, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False"/>
<Condition Binding="{Binding IsCustomer}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
谢谢您的回答!然而,我想你误解了什么。给我带来麻烦的不是Model
的IsTopElement
属性,而是DataGridRow中Partner
对象的IsCustomer
属性,我无法访问该属性。不过我试过你的方法。不幸的是,
对我的第二个条件不起作用。VS表示无法解析DataContext.IsCustomer
。我可以运行应用程序,但没有达到预期的行为。您如何知道哪个属性给您带来了麻烦?合作伙伴没有任何模型属性,那么为什么您的第一个绑定可以工作呢?这里您没有给出全部情况……因为Partner类有一个iCustomer属性,所以您应该能够直接绑定到这个属性,就像我向您展示的那样。怎么样?由于Partners和IsTopElement属于同一类,因此应该可以工作。至少在你发布的代码中。根据您提供的信息,您的问题是不可复制的。我进一步考虑了您的建议,并将AncestorType更改为DataGridRow
完成了以下操作:)我知道这必须是第二个无法工作的绑定,因为如果没有它,Checkboscolumn将按需要禁用。我编辑了你的答案,并接受了它。再次感谢你的帮助!
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding DataContext.IsTopElement, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False"/>
<Condition Binding="{Binding IsCustomer}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>