如何DataGrid通过绑定隐藏WPF中的列?
这就是我做的:
<DataGridTextColumn Header="Column header"
Binding="{Binding ColumnValue}"
Width="100"
ElementStyle="{StaticResource DataGridRightAlign}"
Visibility="{Binding MyColumnVisibility}" />
Run Code Online (Sandbox Code Playgroud)
这就是我得到的(除了列仍然可见):
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement.BindingExpression:路径= MyColumnVisibility; 的DataItem = NULL; target元素是'DataGridTextColumn'(HashCode = 1460142); 目标属性是"可见性"(类型"可见性")
不知道什么是治理手段.在我窗口的某个地方是否有一些总统先生决定哪些有效,哪些无效?或者我必须投票?
在网上搜索解决方案时,我发现有十几页具有很好的标题,但完全不相关或不可复制的内容.所以这似乎是关于这个问题的第一个问题.任何的想法?
这是XAML:
<DataGrid Grid.Column="0" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}"
x:Name="ColumnsGrid" RowHeaderWidth="0">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Binding="{Binding Path=Header}"
Header="{Binding ElementName=ColumnsGrid, Path=DataContext.Count, StringFormat=Columns ({0}), diag:PresentationTraceSources.TraceLevel=High}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
绑定返回错误:System.Windows.Data错误:2:无法找到目标元素的管理FrameworkElement或FrameworkContentElement.
我错过了什么?
更新:
答案如下:http: //blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx
这里发生了什么?Columns集合只是Datagrid中的一个属性; 此集合不在逻辑(或可视)树中,因此DataContext不会被继承,这会导致无法绑定.
更新2: 关于DataGrid警告的好文章:http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx
我的用户控件上下文菜单可见性无法绑定依赖项属性.任何的想法?
这是我的WPF代码
<UserControl.ContextMenu>
<ContextMenu Visibility="{Binding ElementName=wellControl, Path=IsInCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}">
<MenuItem Command="local:GCommands.Edit" />
<MenuItem Command="local:GCommands.Delete" />
<MenuItem Command="local:GCommands.ExportFcsFiles" />
<MenuItem Command="local:GCommands.BatchExportStatistics" />
<Separator/>
<MenuItem Command="local:GCommands.SaveAs" Header="Save As..." />
</ContextMenu>
</UserControl.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
如果我设置Visibility ="Hidden",它将对我有用.像这样:
<ContextMenu Visibility="Hidden"/>
Run Code Online (Sandbox Code Playgroud)
如果使用它,它将无法正常工作
<ContextMenu Visibility="{Binding ElementName=wellControl, Path=IsInCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}">
Run Code Online (Sandbox Code Playgroud)
我很确定Visibility ="{Binding ElementName = wellControl,Path = IsInCompactMode,Converter = {StaticResource BooleanToVisibilityConverter}}"没有问题,因为它适用于其他人.
这是我的依赖属性
public bool IsInCompactMode
{
get {return (bool)GetValue(IsInCompactModeProperty); }
set {SetValue(IsInCompactModeProperty, value); }
}
public static readonly DependencyProperty IsInCompactModeProperty =
DependencyProperty.Register("IsInCompactMode", typeof(bool), typeof(WellControl), new PropertyMetadata(false));
Run Code Online (Sandbox Code Playgroud)
我试过这种方式,似乎它仍然不起作用,这真是太奇怪了!
<ContextMenu x:Name="menu" IsOpen="{Binding ElementName=wellControl, …Run Code Online (Sandbox Code Playgroud)