如何在datagrid wpf中访问来自子级的父级?

时间:2016-06-13 06:28:37

标签: wpf datagrid

我目前正在开发一个带有Datagrid的WPF应用程序。 我有3个班,Parent class,Child Class和GrandChild Class。 (父母有一个Child的集合。孩子有一个GrandChild的集合)。 窗口的DataContext设置为Parent。 Datagrid的项目源设置为GrandChild。 主窗口中有一个复选框,其IsChecked属性绑定到父类。

现在,datagrid列的一个可见性取决于此复选框。如果选中该复选框,则该列将折叠。

如何将Parent属性绑定到DataGridTextColumn的visibility属性(我已经实现了可见性转换器)?

以下是示例方案

public class TableViewModel
{
public TableViewModel()
{
  PopulateTables();
}

public  ObservableCollection<Table> Tables { get; set; }

public Table SelectedItem { get; set; }

}

Public class Table{

public string TableName { get; set; }

public bool HasHeaders { get; set; }

public ObservableCollection<Column> Columns { get; set; }

}

public class Column{

public string HeaderText { get; set; }
public int Width { get; set; }
public int Height { get; set; }
}

TblManager.xaml.cs

public partial class TblManager : Window
{
    public TblManager()
        {
            InitializeComponent();  

            this.DataContext = new TableViewModel();                       
        }
}

TblManager.xaml

<Grid>
<ListBox Name="lstTables" ItemsSource="{Binding path=Tables}" SelectedItem="{Binding Path=SelectedItem}" Width="160" HorizontalAlignment="Left" >
    <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=TableName}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
</ListBox>   

<GroupBox Name="grpProperties" Header="Properties" Width="150" Height="170" Margin="167,0,0,31" HorizontalAlignment="Left" VerticalAlignment="Bottom">
   <Grid Margin="0,5,0,0">
      <CheckBox Name="chkRemoveHeaderRow" Content="Remove Header Row" IsChecked="{Binding Path=SelectedItem.HasHeaders, NotifyOnSourceUpdated=True}"  />
    </Grid>
</GroupBox>

<GroupBox Name="grpColumns" Header="Columns" Width="220" Height="170" Margin="311,0,0,30" VerticalAlignment="Bottom">
  <DataGrid Name="dgTable"  ItemsSource="{Binding Path=SelectedItem.Columns}" AutoGenerateColumns="False" CanUserAddRows="False"   HeadersVisibility="Column" SelectionMode="Single">
     <DataGrid.Columns>
          <DataGridTextColumn Header="Headers" Width="80" Binding="{Binding Path=HeaderText,  UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding XXXXXXXXXXXXXX}" />
          <DataGridTextColumn Header="Width" Width="60" Binding="{Binding Path=Width, Converter={StaticResource SwapConverter}, ConverterParameter=TableColWidth,  UpdateSourceTrigger=PropertyChanged}"  />
          <DataGridTextColumn Header="Height" Width="60" Binding="{Binding Path=Height, Converter={StaticResource SwapConverter}, ConverterParameter=TableColWidth,  UpdateSourceTrigger=PropertyChanged}"  />
     </DataGrid.Columns>
 </DataGrid>

如何将“删除标题行”复选框HasHeaders属性绑定到DataGridTextColumn的Visibility属性?

0 个答案:

没有答案