我只是想在GridViewColumnHeader.ContentTemplate中设置一个折叠的文本框。我相信所有操作都可以正确完成,但是由于某种原因,设置boolean属性时,文本框不会折叠。
信息
BooleanToCollapsedConverter
此转换器与我的网格视图表的视图相同。我知道转换器可以工作,因为我已经在同一视图中的其他UI元素上使用了它。
<Grid.Resources>
<ResourceDictionary>
<local:BooleanToCollapsedConverter x:Key="BooleanToCollapsedConverter"/>
</ResourceDictionary>
</Grid.Resources>
这是booleanToCollapsedConverter的类
public class BooleanToCollapsedConverter : BaseValueConverter<BooleanToCollapsedConverter>
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
视图
这是一部分网格视图列的代码,我试图在样式内使用转换器。 GridViewColumnHeader的可见性已正确设置并根据需要折叠。带有数据模板的内部部分却无法正常工作。
<GridViewColumn DisplayMemberBinding = "{Binding Description}"
Width="auto">
<GridViewColumnHeader Content = "Description"
Visibility="{Binding HeaderList[1].IsChecked, Converter={StaticResource BooleanToCollapsedConverter}}"
local:GridViewBehaviors.CollapseableColumn="True">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height = "25"
FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter}}"/>
<TextBlock Text = "Description" ></ TextBlock >
</ StackPanel >
</ DataTemplate >
</ GridViewColumnHeader.ContentTemplate >
</ GridViewColumnHeader >
</ GridViewColumn >
视图模型
这是我在视图模型中的布尔属性。
/// <summary>
/// True if the user wants to apply filters to the rows.
/// Once set the UI will display all filters
/// </summary>
public bool FilterRows
{
get => _filterRows;
set => Set(ref _filterRows, value);
}
最终点
因此,总的来说,当我选中“筛选器行:”复选框时,我实际上只是在试图折叠该文本框。不确定是与样式有关还是我做的不当?任何帮助将不胜感激!
谢谢
答案 0 :(得分:2)
尝试设置文本框绑定的数据源。 How do I use WPF bindings with RelativeSource?
像这样的东西。 typeOfAncestor是UserControl或Window
{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
答案 1 :(得分:0)
如果定义了FilterRows
属性的视图模型是父级DataContext
的{{1}},那么这应该起作用:
DataGrid
还请注意,您可以使用内置的转换器在<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}"
Visibility="{Binding DataContext.FilterRows,
RelativeSource={RelativeSource AncestorType=DataGrid},
Converter={StaticResource BooleanToCollapsedConverter}}"/>
和bool
之间进行转换,而不用创建自己的转换器:
Visibility