如何绑定DataGridTemplateColumn.Visibility到DataGrid.Ite

2019-07-21 06:06发布

我需要的绑定Visibility一个的DataGridTemplateColumn到外的财产DataGrid.ItemsSource ,因为我需要在所有行此列绑定到一个属性里面ViewModel ,但据我所知,你才可以绑定,为东西里面ItemsSource或者你应该使用ElementStyleEditingElementStyle我已经尝试过这样的代码:

 <DataGridTemplateColumn Header="post" 
                      Visibility="{Binding DataContext.ProjectPostVisibility
                    , RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MvvmCommonControl:DataGrid}}"/>

我敢肯定,我的结合是正确的,因为它在我的绑定工作正常DataGridCell.Visibility象下面这样:

<DataGridTemplateColumn Header="post">
    <DataGridTemplateColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Setter Property="Visibility" Value="{Binding DataContext.ProjectPostVisibility,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MvvmCommonControl:DataGrid}}"/>
                        </Style>
                    </DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn >

Answer 1:

您结合是正确的,但它会与不工作DataGridTemplateColumn直接,因为它不是在视觉树。 所以它不是inherting DataContext

您需要将绑定DataGridTemplateColumn从后面的代码。 这里是一个演示 ,显示做这件事的方式。



Answer 2:

在DataGridTemplateColumn.CellStyle和完成添加此setter:

   <Setter Property="Visibility" Value="{Binding DataContext.isVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/>

如果您需要更多的帮助,看我下面的例子。 我想删除按钮不能在项目级别可见。 首先,你必须确保你在你的视图模型有一个IsVisible属性:

  private System.Windows.Visibility _isVisible;
    public System.Windows.Visibility isVisible
    {
        get { return _isVisible; }
        set
        {
            if (_isVisible != value)
            {
                _isVisible = value;
                OnPropertyChanged("isVisible");
            }
        }
    }

然后:

  if (isProj == false)
            this.model.isVisible = Visibility.Visible;
        else
            this.model.isVisible = Visibility.Collapsed;

XAML:

<DataGridTemplateColumn  >
       <DataGridTemplateColumn.CellTemplate >
            <DataTemplate >
               <Button x:Name="btnRemove" Content="X">
                 <Button.Style>
                    <Style TargetType="{x:Type Button}">
                         <Setter Property="FontWeight" Value="ExtraBold" />
                         <Setter Property="FontSize" Value="50" />
                     </Style>
                 </Button.Style>
            </Button>
         </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
   <DataGridTemplateColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
               <Setter Property="Background"  Value="Red"/>
               <Setter Property="Visibility" Value="{Binding DataContext.isVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/>
        </Style>
   </DataGridTemplateColumn.CellStyle>



文章来源: How to bind DataGridTemplateColumn.Visibility to a property outside of DataGrid.ItemsSource?