2011-06-15 110 views
7

如果应用DataTrigger,是否可以使用通配符或调用方法来解决问题?来自DataTrigger的WPF调用方法

我现在有我的DataList控件绑定到包含文件名的IEnumerable的,我想是灰色的文件名,如果有文件扩展名与“旧”的开始

我不工作的梦想XAML标记看起来像这样的:

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding}" Value="*.old*"> 
     <Setter TargetName="FileName" Property="Foreground" Value="Gray"/> 
    </DataTrigger> 
</DataTemplate.Triggers> 

唯一可行的解​​决方案,我已经能够拿出的是插入包含此逻辑新的视图模型性质,但我想,以避免可能的话改变视图模型。

回答

7

回答这两个问题是肯定的....拐弯抹角地

如果使用绑定转换器,你可以传递参数给它,并将它返回一个布尔值,这将是一种有效的方法做你所描述的。

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=., Converter={StaticResource myFileExtensionConverter}, ConverterParameter=old}" Value="True"> 
     <Setter TargetName="FileName" Property="Foreground" Value="Gray"/> 
    </DataTrigger> 
</DataTemplate.Triggers> 

在转换器会是这个样子

public class MyFileExtensionConverter : IValueConverter { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     Boolean returnValue = false; 

     String fileExtension = parameter as String; 
     String fileName = value as String; 

     if (String.IsNullOrEmpty(fileName)) { } 
     else if (String.IsNullOrEmpty(fileExtension)) { } 
     else if (String.Compare(Path.GetExtension(fileName), fileExtension, StringComparison.OrdinalIgnoreCase) == 0) { 
      returnValue = true; 
     } 
     return returnValue; 
     } 

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

基本上当文件扩展名匹配你会得到一个“真”,这将触发触发器。

+0

谢谢,这正是我正在寻找。 – squig 2011-06-15 10:15:26

+0

每次我发现自己想从xaml“调用一个方法”,这个问题都可以用转换器解决,这很有趣。如果您需要多个参数(或可绑定参数),那么您正在使用IMultiValueConverter与MultiBinding进行对话。 – 2011-06-16 01:54:27