将文本框的可见性绑定到内容模板中的视图模型 属性

Bind visibility of text box to view model property in a content template

我只是想在 GridViewColumnHeader.ContentTemplate 中将文本框设置为折叠。我相信一切都在正确完成,但由于某种原因,当设置布尔值 属性 时,文本框不会折叠。

信息

BooleanToCollapsedConverter

此转换器与我的网格视图处于同一视图 table。我知道转换器有效,因为我在同一视图中的其他 UI 元素上使用了它。

   <Grid.Resources>
       <ResourceDictionary>
           <local:BooleanToCollapsedConverter x:Key="BooleanToCollapsedConverter"/>
       </ResourceDictionary>
   </Grid.Resources>

这是 booleanToCollapsedConverter

的 class
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);
    }

最终分数

因此,总的来说,当我选中“筛选行:”复选框时,我只是在字面上试图折叠该文本框。不知道是风格问题还是我操作不当?任何帮助将不胜感激!

谢谢

尝试为文本框绑定设置数据源。 How do I use WPF bindings with RelativeSource?

像这样。 typeOfAncestor 是 UserControl 或 Window

{Binding FilterRows, Converter={StaticResource BooleanToCollapsedConverter},
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

如果定义 FilterRows 属性 的视图模型是父 DataGridDataContext,这应该有效:

<TextBox Height="25" FontSize="{StaticResource FontSizeSmall}" 
                             Visibility="{Binding DataContext.FilterRows, 
                                RelativeSource={RelativeSource AncestorType=DataGrid}, 
                                Converter={StaticResource BooleanToCollapsedConverter}}"/>

另请注意,有一个用于在 boolVisibility 之间进行转换的内置转换器,您可以使用它来代替创建自己的转换器:

<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />