繁体   English   中英

绑定文本框的可见性以查看内容模板中的模型属性

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

我只是想在GridViewColumnHeader.ContentTemplate中设置一个折叠的文本框。 我相信所有操作都可以正确完成,但是由于设置了boolean属性,由于某些原因,文本框不会折叠。

信息

  • 我有一个具有带FilterRows布尔属性的视图模型的视图。
  • 我正在对网格视图进行样式设置,以允许用户设置FilterRows属性,并为每个标题显示过滤器。
  • 我尝试使用BooleanToVisibilityConverter和BooleanToCollapsedConverter。
  • 我已验证用户选择复选框时在视图模型中设置了布尔值。

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

在此处输入图片说明

最终分数

因此,总的来说,当我选中“筛选器行:”复选框时,我实际上是在尝试折叠该文本框。 不确定是与样式有关还是我做的不当? 任何帮助将不胜感激!

谢谢

尝试设置文本框绑定的数据源。 如何将WPF绑定与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" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM