Как привязать DataTrigger к свойству интерфейса - PullRequest
0 голосов
/ 22 июня 2011

У меня есть 4 класса, которые реализуют мой пользовательский интерфейс ICalendarItem.Этот интерфейс имеет свойство под названием 'Jours'.

ObservableCollection<KeyValuePair<DateTime, DateTime>> Jours;

Мой класс переопределяет это свойство следующим образом:

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

Когда значение Jours.Count изменяется от 0 до 1, я хочувызвать действие, поэтому я попробовал это:

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

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

Ни один из этих 2 DataTrigger не работает.

Кто-нибудь знает, как связать DataTrigger со свойством Interface?

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Если вы хотите специально связать пользовательское свойство интерфейса, вам нужно поместить пространство имен, интерфейс и имя свойства в круглые скобки.Затем вы можете ссылаться на подсвойство, например Count, вне скобок.

<DataTrigger Binding="{Binding Path=(local:ICalendarItem.Jours).Count}" Value="1">
...
</DataTrigger>
1 голос
/ 22 июня 2011

В моем тесте его работа выполнена хорошо. Пожалуйста, обратитесь к следующему коду, который, вероятно, поможет вам.

Что делает этот код, когда «Jours.Count» равен «3», фон окна приобретает красный цвет. 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; }
}
...