WPF'de veri tetikleyicisi için nasıl çoklu koşullar sağlayabilirim?WPF'de veri tetiklemesi için nasıl çoklu koşullar sağlayabilirim?
cevap
Kullanım MultiDataTrigger tip
<Style TargetType="ListBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=State}" Value="WA">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name}" Value="Portland" />
<Condition Binding="{Binding Path=State}" Value="OR" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Cyan" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
@jasonk - Sahip "veya" o zamandan beri bütün şartları (A ve B) < => ~ (~ A veya ~ B)
olumsuzlamak istiyorsanız ancak diğer değerleri varsa boole daha tip dönüştürücüler kullanarak deneyin:
<MultiDataTrigger.Conditions>
<Condition Value="True">
<Condition.Binding>
<MultiBinding Converter="{StaticResource conditionConverter}">
<Binding Path="Name" />
<Binding Path="State" />
</MultiBinding>
</Condition.Binding>
<Setter Property="Background" Value="Cyan" />
</Condition>
</MultiDataTrigger.Conditions>
Eğer dönüştürme yönteminde size uygun bir koşulu üretmek için istediğiniz şekilde değerleri kullanabilirsiniz.
Ah, her şeyi etkisiz hale getirmek ve bir OR koşuluna çevirmek için akıllı hareket :) –
Bu yanıtı biraz genişletebilir misiniz? Nasıl kullanacağımı bilmiyorum. 'ConditionConverter' ne yapar?Bu örnekte "Portland" ve "OR" kelimelerini bizim iki 'veya' seçeneklerimiz olarak nasıl belirliyoruz? – DLeh
@DLeh - [MultiBinding] kullanımı hakkında [İyi bir öğretici] (http://tech.pro/tutorial/809/wpf-tutorial-using-multibindings). – cod3monk3y
@serine's answer ürününü ayrıntılı olarak incelemek ve önemsiz çok değerli koşuluyla çalışmayı göstermek için: NOT a AND (b OR NOT c)
boolean koşulu için bir öğenin üzerinde "karartma" kaplaması göstermeye ihtiyacım vardı.
Arka plan için bu "Çoktan Seçmeli" sorudur. Kullanıcı yanlış bir cevap alırsa devre dışı olur (kararır ve tekrar seçilemez). Otomatik bir aracı, bir açıklama vermek için herhangi bir seçim üzerinde odak odaklanma yeteneğine sahiptir (vurgulanan kenarlık). Aracı bir öğeye odaklandığında, devre dışı bırakılmış olsa bile soluk olmamalıdır. Odaklanmayan tüm öğeler işaretsiz işaretlenir ve soluk olmalıdır.
karartma için mantık böylece:
NOT IsFocused AND (IsDefocused OR NOT Enabled)
bu mantığı uygulamak için, bir jenerik IMultiValueConverter
XAML olarak benim üzerinde lojik
// 'P' represents a parenthesis
// ! a && (b || ! c)
class NOT_a_AND_P_b_OR_NOT_c_P : IMultiValueConverter
{
// redacted [...] for brevity
public object Convert(object[] values, ...)
{
bool a = System.Convert.ToBoolean(values[0]);
bool b = System.Convert.ToBoolean(values[1]);
bool c = System.Convert.ToBoolean(values[2]);
return !a && (b || !c);
}
...
}
maç için (beceriksizce) adında yapılan Bunu, bir MultiDataTrigger
<Style><Style.Triggers>
kaynağında kullanıyorum
Ve bütünlüğü uğruna
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!-- when the equation is TRUE ... -->
<Condition Value="True">
<Condition.Binding>
<MultiBinding Converter="{StaticResource NOT_a_AND_P_b_OR_NOT_c_P}">
<!-- NOT IsFocus AND (IsDefocused OR NOT Enabled) -->
<Binding Path="IsFocus"/>
<Binding Path="IsDefocused" />
<Binding Path="Enabled" />
</MultiBinding>
</Condition.Binding>
</Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<!-- ... show the 'dim-out' overlay -->
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
, benim dönüştürücü bir ResourceDictionary
<ResourceDictionary xmlns:conv="clr-namespace:My.Converters" ...>
<conv:NOT_a_AND_P_b_OR_NOT_c_P x:Key="NOT_a_AND_P_b_OR_NOT_c_P" />
</ResourceDictionary>
Bunun, bu şekilde kullanılacak dönüştürücülerin amacı olduğunu sanmıyorum. Gerçekten de, değerleri gösterim için dönüştürmek içindir. Bu karmaşık hale geldiğinde, size ihtiyacınız olanı veren görünüm modelinde hesaplanmış bir özellik oluşturun. –
Bu adlandırma –
Lütfen programlamanın bir zanaat olduğunu ve kodun zarif olduğunu hatırlamak için bir sessizlik anı yakalayın. –
- 1. FilterExpression için Çoklu Koşullar
- 2. Çoklu değer Koşullar DataTrigger
- 3. Döngü ve Çoklu Koşullar
- 4. EntityFieldQuery çoklu alternatif koşullar
- 5. Eğer izin - Çoklu koşullar
- 6. Swift için Çoklu Koşullar 'If' Bildirimi?
- 7. ActiveRecord OR sorgu (çoklu koşullar)
- 8. R data.table Çoklu Koşullar Katıl
- 9. MySQL İçerisine Çoklu Koşullar Ekleme
- 10. Çoklu koşullar ile SQL Android Sorgulama formülasyonu
- 11. koşullar
- 12. muliti-koşullar C# dizi sorgulamak için nasıl
- 13. , koşullar
- 14. Javada, bunlardan biri sinyal verilinceye kadar çoklu `Koşullar 'beklemek nasıl
- 15. Çoklu Faktör Ağırlıklı Sıralama ile en alakalı sonuçları nasıl sağlayabilirim?
- 16. Koşullar:
- 17. UICollectionViewController'da GetSizeForItem uygulamasını nasıl sağlayabilirim?
- 18. Ekran çoklu veri noktaları
- 19. LISP Koşullar İçin Özel Formlar
- 20. MySQL DB alan için çoklu veri
- 21. Çoklu veri tabanları Ecto
- 22. Neden çoklu ardışık olmayan eşit koşullar vba'da çalışmıyor?
- 23. Çoklu Veri Okuyucular Kullanılıyor
- 24. SSIS Çoklu Veri Hedefleri
- 25. Liste görünümünün tetiklemesi IsSelected özelliği (Başlangıç)
- 26. Açısal 2/IE'nin otomatik olarak giriş doğrulamasını tetiklemesi nasıl önlenir?
- 27. Veri kümelerine çoklu sütunlarda nasıl katılır?
- 28. CakePHP İçindekiler: derin koşullar nasıl ayarlanır?
- 29. Çoklu Render Hedefler veri kaydetmiyor
- 30. Python'da çoklu veri sözlüklerini birleştirme
tanımlanan multiTrigger bir "VEYA" deyimi yapmanın bir yolu var mı. Örneğin. name = "portland" VEYA state = "OR" – jasonk
@jasonk - Bunu bir MultiTrigger ile yapabileceğinizden emin değilsiniz. Bunun için iki tetikleyici tanımlayabilirsiniz .. – Gishu
Eğer basit bir OR koşulu ifadesiyse, mantığı tersine çevirip bir AND'ye dönüştürebilirsiniz. | condition1 | condition2 | sonuç | | true | true | doğru | | true | false | doğru | | false | true | doğru | | false | false | yanlış |/OR öğesinin doğru olup olmadığını denetlemek yerine , her iki/AND öğesinin yanlış olup olmadığını kontrol edin ve varsayılan değeri true olarak ayarlayın. –