代码之家  ›  专栏  ›  技术社区  ›  SAT

在DataGridTemplateColumn.CellStyle中使用DataTrigger

  •  1
  • SAT  · 技术社区  · 6 年前

    我有一个数据报如下,

    <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”的属性。

    2 回复  |  直到 6 年前
        1
  •  3
  •   mm8    6 年前

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

    <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 属性。

    如果要绑定到相同的属性 SelectedSet 行来自的绑定的定义如下:

    <DataTrigger Binding="{Binding DataContext.SelectedSet.IsDefault, RelativeSource={RelativeSource AncestorType=DataGrid}}" Value="True">
        <Setter Property="IsEnabled" Value="False"/>
    </DataTrigger>
    
        2
  •  0
  •   SAT    6 年前

    这对我很有用,

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