我想在所有條件都爲真時將控件的「可見性」屬性設置爲指定值。如下例所示:手動評估條件
<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(「Conditions」)],將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是假的,然後更改爲true。
UPDATE:現在使用轉換器
MultiValueConverter,如果所有的布爾值將是真實的,那麼它返回Visibility.Visible,否則.Collapsed
如果條件綁定價值變動<MultiBinding Converter="{StaticResource VisibilityConverter}" ConverterParameter="true">
<Binding Path="BOOL1"/>
<Binding Path="BOOL2"/>
<Binding Path="BOOL3"/>
</MultiBinding>
ValueConverter,在這裏它不是notifiying ,但在這裏,我可以添加整個條件
<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)
- 它需要更新,如果一個綁定的變化
任何想法的值?
你想要做的就是定義在運行時這種行爲是什麼? – Seffix