2009-08-06 60 views
4

如何在属性不为空时触发WPF中的操作? 这是一个可行的解决方案时为空WPF触发器不为空

<Style.Triggers> 
    <DataTrigger Binding="{Binding}" Value="{x:Null}"> 

     <Setter Property="Background" Value="Yellow" /> 

    </DataTrigger> 
</Style.Triggers> 

我知道你不能“转身”的条件,你需要什么,而是想知道

+1

这是一个重复:http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-null – 2009-08-06 11:17:11

回答

6

不幸的是,你不能。但实际上这是没有必要:你只需要指定背景当值不在风格制定者空,在不触发:

<Style.Setters> 
    <!-- Background when value is not null --> 
    <Setter Property="Background" Value="Blue" /> 
</Style.Setters> 
<Style.Triggers> 
    <DataTrigger Binding="{Binding}" Value="{x:Null}"> 

     <Setter Property="Background" Value="Yellow" /> 

    </DataTrigger> 
</Style.Triggers> 
+0

“绑定” 不是属性... – 2009-08-06 09:41:40

5

可以在Microsoft.Expression.Interactions使用DataTrigger类。 dll附带表达混合

代码示例:

<i:Interaction.Triggers> 
    <ie:DataTrigger Binding="{Binding YourProperty}" Value="{x:Null}" Comparison="NotEqual"> 
     <ie:ChangePropertyAction PropertyName="YourTargetPropertyName" Value="{Binding YourValue}"/> 
    </ie:DataTrigger> 
</i:Interaction.Triggers> 

使用这种方法,你可以触发对GreaterThanLessThan了。 为了使用此代码,您应该引用这两个dll的:

System.Windows.Interactivity.dll
Microsoft.Expression.Interactions.dll

并添加相应的命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions" 
0

这是一个老问题,但我想回答。其实你可以。只需要在绑定中使用Converter。转换器必须返回null或不。所以你会检查语句是真是假。它规定如果返回值为false,可以检查两个条件,这意味着它不为空。如果是真的,则表示它为空。

<converters:IsNullConverter x:Key="IsNullConverterInstance"/> 

<Style> 
<Style.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=DataContext, Converter={StaticResource IsNullConverterInstance}" Value="True">  
     <Setter Property="Background" Value="Yellow" />  
    </DataTrigger> 
</Style.Triggers></Style> 


    public class IsNulConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     return value == null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     return Binding.DoNothing; 
    } 
}