来自DataTrigger的WPF调用方法
问题描述:
如果应用DataTrigger,是否可以使用通配符或调用方法来解决问题?来自DataTrigger的WPF调用方法
我现在有我的DataList控件绑定到包含文件名的IEnumerable的,我想是灰色的文件名,如果有文件扩展名与“旧”的开始
我不工作的梦想XAML标记看起来像这样的:
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="*.old*">
<Setter TargetName="FileName" Property="Foreground" Value="Gray"/>
</DataTrigger>
</DataTemplate.Triggers>
唯一可行的解决方案,我已经能够拿出的是插入包含此逻辑新的视图模型性质,但我想,以避免可能的话改变视图模型。
答
回答这两个问题是肯定的....拐弯抹角地
如果使用绑定转换器,你可以传递参数给它,并将它返回一个布尔值,这将是一种有效的方法做你所描述的。
<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