Я хочу установить для свойства «Видимость» элемента управления указанное значение, когда все условия выполняются.Как в следующем примере:
<TextBlock Text="TEST">
<e:Interaction.Behaviors>
<bhv:VisibilityBehaviour VisibilityIfTrue="Visible" VisibilityIfFalse="Collapsed">
<Condition Binding="{Binding BOOL1}" Value="true"/>
<Condition Binding="{Binding BOOL2}" Value="true"/>
<Condition Binding="{Binding BOOL3}" Value="true"/>
</bhv:VisibilityBehaviour>
</e:Interaction.Behaviors>
</TextBlock>
Как я могу вручную оценить эти условия?Я знаю, как получить значение, но если значение изменяется, я не уведомлен.
Я знаю, что могу получить значение цели привязки, используя отражения.Затем я могу сравнить оба этих значения из условия.
С помощью атрибута [ContentProperty ("Условия")] условия между тегами VisibilityBehavior добавляются в список.
VisibilityBehavior.cs
[ContentProperty("Conditions")]
public class VisibilityBehaviour : Behavior<FrameworkElement>
{
public static readonly DependencyProperty VisibilityProperty;
public Visibility Visibility
{
get { return (Visibility)GetValue(VisibilityProperty); }
set { SetValue(VisibilityProperty, value); }
}
public Visibility VisibilityIfTrue { get; set; }
public Visibility VisibilityIfFalse { get; set; }
public List<Condition> Conditions { get; set; }
static VisibilityBehaviour()
{
VisibilityProperty = DependencyProperty.Register("Visibility", typeof(Visibility), typeof(VisibilityBehaviour), new UIPropertyMetadata(Visibility.Visible));
}
public VisibilityBehaviour()
{
Conditions = new List<Condition>();
}
protected override void OnAttached()
{
base.OnAttached();
FrameworkElement obj = AssociatedObject as FrameworkElement;
if (obj == null)
return;
}
protected override void OnDetaching()
{
base.OnDetaching();
FrameworkElement obj = AssociatedObject as FrameworkElement;
if (obj == null)
return;
}
}
Как получить уведомление, если значение привязки изменилось, например: BOOL1 имеет значение false, а затем изменяется на true.
ОБНОВЛЕНИЕ: теперь используются конвертеры
MultiValueConverter, если все BOOL имеют значение true, тогда он возвращает Visibility.Visible, иначе .Collapsed
<MultiBinding Converter="{StaticResource VisibilityConverter}" ConverterParameter="true">
<Binding Path="BOOL1"/>
<Binding Path="BOOL2"/>
<Binding Path="BOOL3"/>
</MultiBinding>
ValueConverter, здесь он не уведомляет об изменении значения Binding условия, но здесь я могу добавить все условия
<Binding Converter="{StaticResource VisibilityConverter}">
<Binding.ConverterParameter>
<ConditionCollection >
<Condition Binding="{Binding BOOL1}" Value="true"/>
<Condition Binding="{Binding BOOL2}" Value="true"/>
<Condition Binding="{Binding BOOL3}" Value="true"/>
</ConditionCollection>
</Binding.ConverterParameter>
</Binding>
Мне нужно сочетание этих двух конвертеров, потому что
- Я хочу добавить условия в xaml (как в ValueConverter)
- Необходимо обновить, еслизначение привязки изменяется
Есть идеи?