我目前正在开发一个带有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; }
}
public partial class TblManager : Window
{
public TblManager()
{
InitializeComponent();
this.DataContext = new TableViewModel();
}
}
<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属性?