How to bind DataGridTemplateColumn.Visibility to a property outside of DataGrid.ItemsSource?

前端 未结 2 544
旧巷少年郎
旧巷少年郎 2021-01-11 09:13

I need to bind the Visibility of a DataGridTemplateColumn to a property outside of the DataGrid.ItemsSource,because i need to bind thi

相关标签:
2条回答
  • 2021-01-11 09:49

    Your binding is correct, but it won't work with DataGridTemplateColumn directly because it's not in the visual tree. So it's not inherting DataContext.

    You need to bind the DataGridTemplateColumn from code behind. Here is a demo that shows a way of doing it.

    0 讨论(0)
  • 2021-01-11 09:57

    Add this setter in the DataGridTemplateColumn.CellStyle and done:

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

    If you need more help look at my example below. I want the Remove button to not be visible at the project level. First you have to make sure you have a isVisible property in your view model:

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

    Then:

      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>
    

    0 讨论(0)
提交回复
热议问题