2011-06-21 4 views
0

J'ai 4 classes qui implémentent mon interface ICalendarItem personnalisée. Cette interface possède une propriété appelée "Jours".Comment lier DataTrigger à une propriété Interface

ObservableCollection<KeyValuePair<DateTime, DateTime>> Jours; 

Ma override classe cette propriété comme ceci:

public override ObservableCollection<KeyValuePair<DateTime, DateTime>> Jours {...} 

Lorsque le Jours.Count va de 0 à 1, je veux déclencher une action si j'ai essayé ceci:

<DataTrigger Binding="{Binding Path=Jours.Count}" Value="1"> 

<DataTrigger Binding="{Binding Path=(ICalendarItem)Jours.Count}" Value="1"> 

Aucun de ces 2 travaux DataTrigger.

Quelqu'un sait comment lier un DataTrigger à une propriété Interface?

Répondre

2

Lorsque vous voulez lier spécifiquement à une propriété d'interface personnalisée, vous devez placer lieu l'espace de noms, l'interface et le nom de la propriété, entre parenthèses. Vous pouvez ensuite référencer une sous-propriété telle que Count en dehors de la parenthèse.

<DataTrigger Binding="{Binding Path=(local:ICalendarItem.Jours).Count}" Value="1"> 
... 
</DataTrigger> 
+1

je dû inclure 'xmlns: ifs = "clr-namespace: RessourcesHumaines.Interfaces"' au sommet de ma référence et Dictionnary ma propriété comme celui-ci et ça a marché, ty! – Gab

+0

Correct, j'aurais dû spécifier comment spécifier l'espace de noms dans ma réponse, mais je suis content que vous l'ayez compris – sellmeadog

1

Dans mon test, son travail est bien fait. Veuillez vous référer au code suivant, qui vous aidera probablement. Ce que fait ce code, quand `Jours.Count 'est égal à" 3 ", l'arrière-plan de la fenêtre devient de couleur rouge.

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Style TargetType="Grid"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Jours.Count}" Value="3"> 
        <Setter Property="Control.Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <Grid> 
    </Grid> 
</Window> 

CodeBehind:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     ITest test = new TestClass(); 
     this.DataContext = test; 
    } 
} 

interface ITest 
{ 
    ObservableCollection<KeyValuePair<DateTime, DateTime>> Jours { get; set; } 
} 

class TestClass : ITest 
{ 
    public TestClass() 
    { 
     Jours = new ObservableCollection<KeyValuePair<DateTime, DateTime>>(); 
     Jours.Add(new KeyValuePair<DateTime, DateTime>(DateTime.Now, DateTime.Now)); 
     Jours.Add(new KeyValuePair<DateTime, DateTime>(DateTime.Now, DateTime.Now)); 
     Jours.Add(new KeyValuePair<DateTime, DateTime>(DateTime.Now, DateTime.Now)); 
    } 

    public ObservableCollection<KeyValuePair<DateTime, DateTime>> Jours { get; set; } 
} 
Questions connexes