Привязать видимость текстового поля для просмотра свойства модели в шаблоне содержимого - PullRequest
0 голосов
/ 03 января 2019

Я просто пытаюсь установить, чтобы текстовое поле свернулось в моем GridViewColumnHeader.ContentTemplate.Я считаю, что все делается правильно, но по какой-то причине текстовое поле не будет разрушаться, когда установлено логическое свойство.

Информация

  • У меня естьПредставление с моделью представления, имеющей логическое свойство FilterRows.
  • Я оформляю свое сеточное представление, чтобы позволить пользователям устанавливать свойство FilterRows и иметь фильтры для каждого заголовка.
  • Я пытался использоватьBooleanToVisibilityConverter и BooleanToCollapsedConverter.
  • Я проверил, что bool устанавливается в модели представления, когда пользователь устанавливает флажок.

BooleanToCollapsedConverter

Этот конвертер находится в том же виде, что и моя таблица вида сетки.Я знаю, что конвертер работает, потому что я использовал его для других элементов пользовательского интерфейса в том же виде.

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

The View

Вот код для части столбца вида сетки, где я пытаюсь использовать конвертер в стиле.Видимость 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);
    }

enter image description here

Финальные очки

В общем, я буквально пытаюсь свернуть это текстовое поле, когда проверяюФильтр строк: флажок.Не уверен, что это как-то связано со стилем или я делаю что-то неправильно?Любая помощь будет принята с благодарностью!

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Если модель представления, в которой определено свойство FilterRows, является DataContext родительского DataGrid, это должно работать:

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

Также обратите внимание, что есть встроенный конвертер для преобразования между bool и Visibility, который можно использовать вместо создания собственного:

<BooleanToVisibilityConverter x:Key="BooleanToCollapsedConverter" />
0 голосов
/ 03 января 2019

попробуйте установить источник данных для привязки текстового поля. Как использовать привязки WPF с RelativeSource?

что-то вроде этого. typeOfAncestor - это UserControl или Window

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