c# – 来自DataTrigger的WPF调用方法

前端之家收集整理的这篇文章主要介绍了c# – 来自DataTrigger的WPF调用方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以使用通配符或调用方法解决是否应该应用DataTrigger?

我目前将我的DataList绑定到包含文件名的IEnumerable,如果文件扩展名以“old”开头,我希望文件显示为灰色

我的非工作梦想xaml标记看起来像这样:

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

我能够提出的唯一可行解决方案是插入包含此逻辑的新视图模型属性,但我希望尽可能避免更改视图模型.

解决方法

两个问题的答案都是肯定的……以迂回的方式

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

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

转换器看起来像这样

  1. public class MyFileExtensionConverter : IValueConverter {
  2. public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture) {
  3. Boolean returnValue = false;
  4.  
  5. String fileExtension = parameter as String;
  6. String fileName = value as String;
  7.  
  8. if (String.IsNullOrEmpty(fileName)) { }
  9. else if (String.IsNullOrEmpty(fileExtension)) { }
  10. else if (String.Compare(Path.GetExtension(fileName),fileExtension,StringComparison.OrdinalIgnoreCase) == 0) {
  11. returnValue = true;
  12. }
  13. return returnValue;
  14. }
  15.  
  16. public object ConvertBack(object value,System.Globalization.CultureInfo culture) {
  17. return value;
  18. }
  19. }

基本上当文件扩展名匹配时,你得到一个“true”,它将触发触发器.

猜你在找的C#相关文章