回答这两个问题是肯定的....拐弯抹角地
如果使用绑定转换器,你可以传递参数给它,并将它返回一个布尔值,这将是一种有效的方法做你所描述的。
<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;
}
}
基本上当文件扩展名匹配你会得到一个“真”,这将触发触发器。
谢谢,这正是我正在寻找。 – squig 2011-06-15 10:15:26
每次我发现自己想从xaml“调用一个方法”,这个问题都可以用转换器解决,这很有趣。如果您需要多个参数(或可绑定参数),那么您正在使用IMultiValueConverter与MultiBinding进行对话。 – 2011-06-16 01:54:27