【发布时间】:2017-12-26 02:12:09
【问题描述】:
首先,让我向您展示我的课程:
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 中,我有一个 DataGrid,它的 ItemsSource 绑定到 Partners。在这个 DataGrid 中,我有一个 DataGridCheckBoxColumn,它绑定到 Partner 对象的 IsActive 属性和几个 DataGridTextColumns。
我想要实现的是,如果当前 Model 对象不是顶部元素(没有父元素),则属于 Partner 条目的所有 IsActive-Checkbox 单元格,其 IsCustomer == True 应被禁用。
我尝试了以下 XAML 代码:
<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>
我现在面临的问题是我无权访问MultiDataTrigger的第二个条件中DataGrid中Partner对象的属性IsCustomer。那么我怎样才能在那里访问这个属性呢?另外,我没想到在第一个条件中可以访问 Model 的 IsTopElement 属性,因为 DataGrid 的 ItemsSource 绑定到 Partners 但显然我有,这让我很困惑。
任何帮助将非常感激。如果您需要更多信息,请告诉我。
【问题讨论】:
标签: c# wpf xaml binding datagrid