是否可以使用通配符或调用方法来确定是否应应用 DataTrigger?
我目前将 DataList 绑定到包含文件名的 IEnumerable,并且如果文件扩展名以“old”开头,我希望文件名显示为灰色
我的非工作梦想 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;
}
}
基本上,当文件扩展名匹配时,您会得到一个“true”,这将触发触发器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)