2010-06-16 4 views
0

J'ai une liste déroulante liée à une liste d'objets pour un écran de saisie de données. Le modèle d'élément comprend des blocs de texte, une case à cocher et des listes déroulantes.WPF Databound Listbox

Lorsque le ListBox est rempli, je voudrais changer la couleur de premier plan des TextBlocks au rouge si object.value1 = true et object.value2 = 0.

Toutes les idées?

Répondre

0

le code suivant fonctionne:

XAML

<ListBox Name="ListBox1"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <DataTemplate.Triggers> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Value1}" 
             Value="1" /> 
          <Condition Binding="{Binding Value2}" 
             Value="0" /> 
         </MultiDataTrigger.Conditions> 
         <MultiDataTrigger.Setters> 
          <Setter TargetName="RootBorder" 
            Property="Border.Background" 
            Value="#EEE" /> 
         </MultiDataTrigger.Setters> 
        </MultiDataTrigger> 
       </DataTemplate.Triggers> 
       <Border Name="RootBorder"> 
        <TextBlock Text="{Binding Text}" /> 
       </Border> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Classe

public class Model 
{ 
    public Int32 Value1 { get; set; } 
    public Int32 Value2 { get; set; } 
    public String Text { get; set; } 
} 

code

models.Add(new Model() { Value1 = 0, Value2 = 0, Text = "Item #1" }); 
models.Add(new Model() { Value1 = 1, Value2 = 0, Text = "Item #2" }); 
models.Add(new Model() { Value1 = 0, Value2 = 1, Text = "Item #3" }); 
models.Add(new Model() { Value1 = 0, Value2 = 0, Text = "Item #4" }); 
models.Add(new Model() { Value1 = 1, Value2 = 0, Text = "Item #5" }); 
models.Add(new Model() { Value1 = 0, Value2 = 1, Text = "Item #6" }); 
models.Add(new Model() { Value1 = 0, Value2 = 0, Text = "Item #7" }); 
models.Add(new Model() { Value1 = 1, Value2 = 0, Text = "Item #8" }); 
models.Add(new Model() { Value1 = 1, Value2 = 1, Text = "Item #9" }); 

ListBox1.ItemsSource = models; 
0

Utilisez MVVM et demandez à votre modèle d'affichage d'exposer une propriété qui vérifie la condition et renvoie la couleur. Rabattre ensuite la couleur de premier plan à cette propriété :-)