2011-06-15 21 views
7

Bir DataTrigger uygulanacaksa, joker kullanmak veya bir yöntem aramak için bir yöntem kullanmak mümkün müdür?WPF DataTrigger aracından arama yöntemi

Şu anda benim DataList dosya adlarını içeren bir IEnumerable bağlı olan ve uzantısı var dosyaları eğer dosya adları silik olmak istiyorum

Benim olmayan çalışma rüya xaml biçimlendirme gibi görünür "eski" ile başlar Bu:

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

bu mantığı içeren yeni görünümü modeli özelliğini eklemektir ile gelip başardık yegane uygulanabilir çözümdür, ama mümkünse görünüm modelini değiştirerek önlemek istiyoruz.

cevap

7

iki sorunun cevabı evet .... sen bir Bağlanma Converter kullanırsanız buna bir parametre iletebilirsiniz ve bir boolean dönmek var

dolambaçlı şekilde, bu etkili bir yol olacaktır edilir tarif ettiğin şeyi yap. dönüştürücü bu

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

benzer görünümde olacaktır

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

temelde dosya uzantısı tetiği çalıştıracak olan "gerçek" olsun eşleştiğinde.

+0

Teşekkürler Bu tam olarak aradığım şey. – squig

+0

her zaman kendimi bulmak istediğimde, "bir yöntem çağırmak" istediğim xaml sorun çözücü ile çözülebilir. Çoklu parametreler (veya bindable parametreler) istiyorsanız, IMultiValueConverter ile MultiBinding konuşuyorsunuz. –