在 DataGridTemplateColumn.CellStyle 中使用 DataTrigger

Use DataTrigger in DataGridTemplateColumn.CellStyle

我有如下的数据网格,

<DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding SelectedSet.Rows}" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False" CanUserAddRows="False" Style="{StaticResource DataGridStyle2}" HeadersVisibility="Column" SelectedItem="{Binding SelectedItem}" EnableRowVirtualization="False">
  <DataGrid.Columns>
    <DataGridTemplateColumn Width="30*"  Header="{StaticResource RangeColumnHeader}" HeaderStyle="{StaticResource HeaderStyle2}" SortMemberPath="StartValue">
     <DataGridTemplateColumn.CellStyle>
        <DataTrigger Binding="{Binding SelectedSet.IsDefault}" Value="True">
            <Setter Property="IsEnabled" Value="False"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding SelectedSet.IsDefault}" Value="False">
            <Setter Property="IsEnabled" Value="True"/>
        </DataTrigger>
    </DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
 </DataGrid.Columns>
</DatGrid>

我想使用“SelectedSet 的”IsDefault 属性 来设置单元格的 IsEnabled 属性。

我试过上面的代码,它不起作用。

类定义如下,

public class UCSetModel : ViewModelBase
{

    private Set _SelectedSet;
    public Set SelectedSet
    {
        get
        {
            return _SelectedSet;
        }
        set
        {
            _SelectedSet = value;
            RaisePropertyChanged("SelectedSet");
        }
    }
}

 public class Set
{
    private ObservableCollection<Markers> _rows;
    public ObservableCollection<Markers> Rows
    {
        get
        {
            return _rows;
        }

        set
        {
            _rows = value;
            RaisePropertyChanged("Rows");
        }
    }

    private bool _isDefault;
    public bool IsDefault
    {
        get
        {
            return _isDefault;
        }

        set
        {
            _isDefault = value;
            RaisePropertyChanged("IsDefault");
        }
    }   
}

我想绑定到行来源相同 'SelectedSet' 的 属性。

您发布的标记甚至无法编译。这样做:

<DataGridTemplateColumn.CellStyle>
    <Style TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsDefault}" Value="True">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGridTemplateColumn.CellStyle>

IsDefault 应该是 Row 对象的 属性,即你应该从绑定路径中删除 "Set." 假设行没有一个 Set 属性.

如果要绑定到与行来源相同的 SelectedSet 的 属性,则绑定应定义如下:

<DataTrigger Binding="{Binding DataContext.SelectedSet.IsDefault, RelativeSource={RelativeSource AncestorType=DataGrid}}" Value="True">
    <Setter Property="IsEnabled" Value="False"/>
</DataTrigger>

这对我有用,

    <DataTrigger Binding="{Binding Path=DataContext.SelectedSet.IsDefault,ElementName=SetWindow}" Value="True">
      <Setter Property="IsEnabled" Value="False"/>
   </DataTrigger>