首先,让我告诉你我的课程:
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
但显然我有,这是相当混乱的对我来说
任何帮助将非常感激。如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
DataContext
的{{1}}是DataGridCell
个对象。您可以使用Partner
绑定到父{RelativeSource}
的{{1}}。试试这个:
UserControl