„DataTrigger“, kur yra nulinė vertė?

Žinau, kad galiu padaryti seterį, kuris tikrina, ar vertė yra NULL ir ką daro. Pavyzdys:

 <TextBlock> <TextBlock.Style> <Style> <Style.Triggers> <DataTrigger Binding="{Binding SomeField}" Value="{x:Null}"> <Setter Property="TextBlock.Text" Value="It NULL Baby!" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> 

Bet kaip aš galiu patikrinti vertę "ne" ... kaip "NE NULL" arba "NOT = 3"? Ar tai įmanoma XAML?

Rezultatai: Dėkojame už atsakymus ... Aš žinojau, kad galėčiau padaryti vertės konverterį (tai reiškia, kad turėčiau eiti į kodą, ir tai nebūtų tikras XAML, kaip tikėjausi). Tačiau tai atsako į klausimą efektyviai tai galite padaryti gryname XAML. Tačiau pasirinktas atsakymas tikriausiai rodo geriausią būdą sukurti šią funkciją. Geras atradimas.

133
10 дек. Timothy Khouri nustatė 10 dec. 2008-12-10 17:19 '08, 17:19, 2008-12-10 17:19
@ 12 atsakymų

Su „DataTriggers“ susidūriau su panašiu apribojimu, ir atrodo, kad galite tik patikrinti lygybę. Artimiausias dalykas, kurį pamačiau, gali padėti jums atlikti kitų lygių palyginimus nei lygybė.

Šiame dienoraščio įraše aprašoma, kaip atlikti palyginimus, pvz., LT, GT ir kt. „DataTrigger“.

Šis „DataTrigger“ apribojimas gali būti sukurtas tam tikru mastu, naudojant „Converter“, kad būtų galima masažuoti duomenis į specialią vertę, kurią galite palyginti su juo, kaip siūlo Robert McNee.

32
10 дек. Atsakymas pateikiamas J c 10 d. 2008-12-10 19:33 '08 19:33 2008-12-10 19:33

Tam galite naudoti „IValueConverter“:

 <TextBlock> <TextBlock.Resources> <conv:IsNullConverter x:Key="isNullConverter"/> </TextBlock.Resources> <TextBlock.Style> <Style> <Style.Triggers> <DataTrigger Binding="{Binding SomeField, Converter={StaticResource isNullConverter}}" Value="False"> <Setter Property="TextBlock.Text" Value="It NOT NULL Baby!"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> 

Kur kitur yra apibrėžtas „IsNullConverter“ (ir „conv“ yra nustatyta kaip nuoroda į jos vardų erdvę):

border=0
126
10 дек. Robert Macnee atsakymas, pateiktas gruodžio 10 d. 2008-12-10 19:35 '08 at 7:35 pm 2008-12-10 19:35

Tai šiek tiek apgauti, bet aš tiesiog nustatysiu numatytąjį stilių ir tada jį panaikinu DataTrigger, jei vertė yra nulinė ...

  <Style> <!-- Highlight for Reviewed (Default) --> <Setter Property="Control.Background" Value="PaleGreen" /> <Style.Triggers> <!-- Highlight for Not Reviewed --> <DataTrigger Binding="{Binding Path=REVIEWEDBY}" Value="{x:Null}"> <Setter Property="Control.Background" Value="LightIndianRed" /> </DataTrigger> </Style.Triggers> </Style> 
116
27 февр. Atsakymą pateikė Michael Noonan vasario 27 d. 2009-02-27 05:12 '09, 5:12 am. 2009-02-27 05:12

Palyginkite su nuliu (kaip sakė Michaelas Noonanas):

 <Style> <Style.Triggers> <DataTrigger Binding="{Binding SomeProperty}" Value="{x:Null}"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> 

Palyginimas su nuliniu (be keitiklio):

 <Style> <Setter Property="Visibility" Value="Collapsed" /> <Style.Triggers> <DataTrigger Binding="{Binding SomeProperty}" Value="{x:Null}"> <Setter Property="Visibility" Value="Visible" /> </DataTrigger> </Style.Triggers> </Style> 
15
09 мая '12 в 17:21 2012-05-09 17:21 Atsakymą pateikė JoanComasFdz gegužės 09 d. 12 val. 17:21 2012-05-09 17:21

Šį mygtuką naudoju, jei norite įjungti mygtuką tik tada, kai yra pasirinktas sąrašo elementas (ty nulinis):

 <Style TargetType="{x:Type Button}"> <Setter Property="IsEnabled" Value="True"/> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=lvMyList, Path=SelectedItem}" Value="{x:Null}"> <Setter Property="IsEnabled" Value="False"/> </DataTrigger> </Style.Triggers> </Style> 
14
02 сент. Atsakymas pateikiamas SteveCav 02 Sep. 2011-09-02 04:08 '11 at 4:08 2011-09-02 04:08

Galite naudoti „ DataTrigger klasę „ Microsoft.Expression.Interactions.dll“ , kurioje yra „ Expression Blend“ .

Kodo pavyzdys:

 <i:Interaction.Triggers> <i:DataTrigger Binding="{Binding YourProperty}" Value="{x:Null}" Comparison="NotEqual"> <ie:ChangePropertyAction PropertyName="YourTargetPropertyName" Value="{Binding YourValue}"/> </i:DataTrigger </i:Interaction.Triggers> 

Naudodami šį metodą taip pat galite paleisti prieš GreaterThan ir LessThan . Jei norite naudoti šį kodą, turite nurodyti dvi dll bibliotekas:

System.Windows.Interactivity.dll

„Microsoft.Expression.Interactions.dll“

12
23 апр. yossharel atsakymas, balandžio 23 d 2013-04-23 13:52 '13, 13:52, 2013-04-23 13:52
 <StackPanel.Style> <Style> <Setter Property="StackPanel.Visibility" Value="Visible"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=ProfileSelectorComboBox, Path=SelectedItem.Tag}" Value="{x:Null}"> <Setter Property="StackPanel.Visibility" Value="Collapsed"></Setter> </DataTrigger> </Style.Triggers> </Style> </StackPanel.Style> 

Aš čia naudoju atvirkštinę logiką ... nustatydamas, kad mano kamino skydelis yra nematomas, kai mano kombinuotas elementas nėra pilnas, jis veikia labai gerai!

6
30 авг. atsakymas pateikiamas aromore 30 rug . 2013-08-30 23:47 '13, 23:47, 2013-08-30 23:47

Sustabdyti! Nėra konverterio! Nenoriu „parduoti“ šio vaikino bibliotekos, bet nekenčiau to, kad kiekvieną kartą aš norėjau palyginti XAML dalykus.

Taigi, su šia biblioteka: https://github.com/Alex141/CalcBinding

tai galite padaryti [ir daugiau]:

Pirma, „Windows“ / „userControl“ skelbime:

 <Windows.... xmlns:conv="clr-namespace:CalcBinding;assembly=CalcBinding" > 

tada teksto bloke

 <TextBlock> <TextBlock.Style> <Style.Triggers> <DataTrigger Binding="{conv:Binding 'MyValue==null'}" Value="false"> <Setter Property="Background" Value="#FF80C983"></Setter> </DataTrigger> </Style.Triggers> </TextBlock.Style> </TextBlock> 

Magiškoji dalis yra „ conv: Binding“ MYValue == null . Iš tikrųjų galite nustatyti bet kokią sąlygą, kurią jums reikia [pažvelgti į dokumentą].

Atkreipkite dėmesį, kad aš nesu trečiųjų šalių ventiliatorius. tačiau ši biblioteka yra nemokama ir turi mažai įtakos (tik pridėkite 2 DLL).

5
09 дек. Simon atsakė į 09 gruodį 2015-12-09 16:57 '15, 16:57 2015-12-09 16:57

Mano sprendimas yra DataContext instancijoje (arba ViewModel, kai naudojate MVVM). Pridedu savybę, kuri yra teisinga, jei įvykdoma „Ne Null“ sąlyga.

  Public ReadOnly Property IsSomeFieldNull() As Boolean Get Return If(SomeField is Null, True, False) End Get End Property 

ir susieti „DataTrigger“ su minėtuoju turtu. Pastaba „VB.NET“ naudokite „If“ ir „NOT IIf“ operatorių, kuris neveikia su „Null“ objektais. Tada XAML:

  <DataTrigger Binding="{Binding IsSomeFieldNull}" Value="False"> <Setter Property="TextBlock.Text" Value="It NOT NULL Baby!" /> </DataTrigger> 
3
10 марта '12 в 12:01 2012-03-10 12:01 atsakymą pateikė APaglia kovo 12 d. 12 val. 2012-03-10 12:01

Jei ieškote sprendimo, kuris nenaudoja „IValueConverter“, visada galite pereiti žemiau mechanizmo

  <StackPanel> <TextBlock Text="Border = Red when null value" /> <Border x:Name="border_objectForNullValueTrigger" HorizontalAlignment="Stretch" Height="20"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="Black" /> <Style.Triggers> <DataTrigger Binding="{Binding ObjectForNullValueTrigger}" Value="{x:Null}"> <Setter Property="Background" Value="Red" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock Text="Border = Green when not null value" /> <Border HorizontalAlignment="Stretch" Height="20"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="Green" /> <Style.Triggers> <DataTrigger Binding="{Binding Background, ElementName=border_objectForNullValueTrigger}" Value="Red"> <Setter Property="Background" Value="Black" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <Button Content="Invert Object state" Click="Button_Click_1"/> </StackPanel> 
2
10 июня '16 в 13:33 2016-06-10 13:33 atsakymą pateikė Čaitanja Kadamati birželio 16 d. 13:33 2016-06-10 13:33

Keitiklis

 public class NullableToVisibilityConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value == null ? Visibility.Collapsed : Visibility.Visible; } } 

Įrišimas:

 Visibility="{Binding PropertyToBind, Converter={StaticResource nullableToVisibilityConverter}}" 
2
10 мая '12 в 15:35 2012-05-10 15:35 atsakymas pateikiamas abatishchev 10 d. 12 val. 15:35 2012-05-10 15:35

Galite naudoti konverterį arba sukurti naują „ViewModel“ modelio nuosavybę:

 public bool CanDoIt { get { return !string.IsNullOrEmpty(SomeField); } } 

ir naudokite:

 <DataTrigger Binding="{Binding SomeField}" Value="{Binding CanDoIt}"> 
2
26 февр. Atsakymas duotas Butsaty 26 vasario mėn. 2016-02-26 13:49 '16 at 13:49 PM 2016-02-26 13:49