У меня есть окно с сеткой, действующей как форма. Окно не мое, и есть новое требование не показывать (т. Е. Свернуть) строки 4 и 5 на основе выбранного пользователем контекста.wpf данные привязки сетки видимость строки
две вещи, которые я могу думать о том, чтобы сделать эту работу либо:
- Имейте преобразователь на содержание строки, которая принимает логическое значение и коллапсирует видимость, если верно.
- Имейте конвертер на свойство высоты строки сетки.
Я предпочитаю последнее, но я не в состоянии получить входное значение для преобразователя. Код конвертера и привязка ниже.
Может ли кто-нибудь сказать мне, что должно быть обязательным, чтобы сделать эту работу? Есть ли более простой способ сделать это?
конвертер Код
[ValueConversion(typeof(GridLength), typeof(Visibility))]
public class GridLengthToCollapseVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || parameter == null) return Binding.DoNothing;
var result = (GridLength) value;
bool shouldCollapse;
Boolean.TryParse(parameter.ToString(), out shouldCollapse);
return shouldCollapse ? new GridLength() : result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); }
}
Оковы (это где я застрял)
Скажем, я хочу, чтобы значение высоты, чтобы быть 30, если связанный ShowLastName свойство не верно. Неправильная привязка ниже, но что такое?
<RowDefinition Height="{Binding Source=30, Converter={StaticResource GridLengthToCollapseVisibilityConv},ConverterParameter=ShowLastName}" />
Рабочий раствор
[ValueConversion(typeof(bool), typeof(GridLength))]
public class GridLengthToCollapseVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || parameter == null) return Binding.DoNothing;
bool shouldCollapse;
Boolean.TryParse(value.ToString(), out shouldCollapse);
return shouldCollapse
? new GridLength(0)
: (GridLength) parameter;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); }
}
<Grid.Resources>
<cvt:GridLengthToCollapseVisibilityConverter x:Key="GridLengthToCollapseVisibilityConv" />
<GridLength x:Key="AutoSize">Auto</GridLength>
<GridLength x:Key="ErrorLineSize">30</GridLength>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="{StaticResource AutoSize}" />
<RowDefinition Height="{StaticResource ErrorLineSize}" />
<RowDefinition Height="{Binding Path=HideLastName,
Converter={StaticResource GridLengthToCollapseVisibilityConv},ConverterParameter={StaticResource AutoSize}}" />
<RowDefinition Height="{Binding Path=HideLastName,
Converter={StaticResource GridLengthToCollapseVisibilityConv},ConverterParameter={StaticResource ErrorLineSize}}" />
</Grid.RowDefinitions>
Узнал что-то новое сегодня из вашего поста ... ValueConversion и Binding.DoNothing. Благодарю. – KornMuffin