Wpf 在DataGridTemplateColumn.CellStyle中使用DataTrigger

Wpf 在DataGridTemplateColumn.CellStyle中使用DataTrigger,wpf,datagrid,datatrigger,datagridtemplatecolumn,Wpf,Datagrid,Datatrigger,Datagridtemplatecolumn,我有一个数据网格,如下所示 <DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding SelectedSet.Rows}" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False" CanUserAddRows="False" Style="{StaticResource DataGridStyle2}" Heade

我有一个数据网格,如下所示

<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>
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”IsDefault属性设置单元格的IsEnabled属性

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

类的定义如下:

<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>
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");
        }
    }   
}
公共类UCSetModel:ViewModelBase
{
专用集_SelectedSet;
公共集合选择集合
{
得到
{
返回_SelectedSet;
}
设置
{
_SelectedSet=值;
RaisePropertyChanged(“SelectedSet”);
}
}
}
公共类集
{
私有可观察收集行;
公共可观测收集行
{
得到
{
返回_行;
}
设置
{
_行=值;
RaisePropertyChanged(“行”);
}
}
私有布尔(bool)isDefault ;;
公共布尔值
{
得到
{
返回默认值;
}
设置
{
_isDefault=值;
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>
这对我很有效

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


是否设置了单个行/项的属性?或者应该同时启用/禁用该特定列中的所有单元格?是否检查了输出窗口中的绑定错误?Set是在视图模型中定义的对象,“Rows”是Set的属性,它是一个可观察的集合。我的观点是我想使用“Set”IsDefault属性设置单元格的IsEnabled属性。@SAT:那你为什么不告诉。。。?查看我编辑的答案。你的答案比我的实际问题更准确地解释了我的问题。但是解决方案不起作用。然后你需要告诉我们什么不起作用,什么“不起作用”实际上意味着什么,以及你的类是如何定义的。您应该阅读。然后将绑定路径更改为
SelectedSet.IsDefault
。请参阅我的编辑。