【问题标题】:WPF Calling method from a DataTrigger从 DataTrigger 调用 WPF 方法
【发布时间】:2011-09-15 04:14:01
【问题描述】:

是否可以使用通配符或调用方法来确定是否应应用 DataTrigger?

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

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

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

我能想出的唯一可行的解​​决方案是插入一个包含此逻辑的新视图模型属性,但我想尽可能避免更改视图模型。

【问题讨论】:

    标签: c# wpf xaml datatrigger


    【解决方案1】:

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

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

    <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”,它将触发触发器。

    【讨论】:

    • 谢谢,这正是我想要的。
    • 每次我发现自己想从 xaml 中“调用方法”时,都可以使用转换器解决问题,这很有趣。如果你想要多个参数(或可绑定参数),你正在谈论一个带有 IMultiValueConverter 的 MultiBinding。
    猜你喜欢
    • 2012-12-06
    • 2011-08-17
    • 1970-01-01
    • 2013-08-26
    • 2023-03-28
    • 2016-06-26
    • 2021-11-14
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多