2011-06-15 40 views
7

¿Es posible utilizar un comodín o llamar a un método para determinar si se debe aplicar un DataTrigger?WPF Método de llamada desde un DataTrigger

Actualmente tengo mi DataList unido a un IEnumerable que contiene los nombres de archivo y quiero los nombres de los archivos a ser atenuados si hay archivos de extensión comienza con "viejo"

Mi inhábil marcado sueño xaml se ve algo como esto:

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

la única solución viable que he sido capaz de llegar a es insertar una nueva propiedad vista del modelo que contiene esta lógica, pero me gustaría evitar el cambio del modelo de vista, si es posible.

Respuesta

7

La respuesta a ambas preguntas es sí .... de una manera indirecta

Si se utiliza un convertidor de encuadernación se puede pasar un parámetro a y haga que sea devolver un valor lógico, que sería una manera eficaz de haz lo que describes

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

donde el convertidor se vería algo como esto

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; 
     } 
    } 

básicamente cuando la extensión del archivo coincide se obtiene un "verdadero", que se dispara el gatillo.

+0

Gracias esto es exactamente lo que estaba buscando. – squig

+0

es divertido cada vez que quiero "llamar un método" de xaml, el problema se puede resolver con un convertidor. Si quiere múltiples parámetros (o parámetros enlazables) está hablando de un enlace múltiple con un IMultiValueConverter. –

Cuestiones relacionadas