Как вызвать связанный элемент в WPF?

Я хочу активировать триггер, если идентификатор свойства связанных элементов равен свойству в моем пользовательском элементе управления.

Но я не могу использовать привязки в своих триггерах!

Как бы я это сделал?


person ErikTJ    schedule 17.03.2010    source источник


Ответы (2)


Это должно работать:

<DataTrigger
    Value="True">

    <DataTrigger.Binding>
        <MultiBinding
            Converter="{x:Static local:EqualityConverter.Instance}">
            <Binding
                Path="BoundProperty" />
            <Binding
                ElementName="MockCustomControl"
                Path="Text" />
        </MultiBinding>
    </DataTrigger.Binding>

    <DataTrigger.Setters>
        <Setter
            TargetName=" ... "
            Property=" ... "
            Value=" ... " />

         ...
         ...

    </DataTrigger.Setters>

</DataTrigger>

И конвертер может быть примерно таким:

public class EqualityConverter : IMultiValueConverter
{
    public static readonly EqualityConverter Instance = new EqualityConverter();

    #region IMultiValueConverter Members

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values == null || values.Length == 0) return false;

        for (int i = 1; i < values.Length; i++)
            if (!values[i].Equals(values[0])) return false;

        return true;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

Обратите внимание, что я использовал общий преобразователь, который может сравнивать значения n, но вы можете использовать простой в соответствии с вашими потребностями.

Надеюсь это поможет.

person mg007    schedule 18.03.2010
comment
Я всегда получаю значения [1], установленные в DependencyProperty.UnsetValue при привязке к свойству. Я пробовал много вариантов, но всегда получаю UnsetValue! Предложения? - person ErikTJ; 18.03.2010
comment
на моей стороне, это работает отлично! Похоже, у вас проблемы с привязками. Где находится ваш элемент управления (который я назвал MockCustomControl) в визуальном дереве? Может быть, вы можете загрузить свой проект куда-нибудь (например, SkyDrive.com), чтобы я мог помочь вам в дальнейшем :) - person mg007; 19.03.2010
comment
Более короткая реализация: возвращаемые значения != null && values.Length ›= 1 && values.Skip(1).All(v =› v == values[0]); - person splintor; 27.10.2013

Свойство value DataTrigger не принимает привязки?


    <DataTrigger Binding="{Binding BoundPropertyId}" Value="{Binding ElementName=Mine, Path=Property}" />

Если это не сработает, вам может потребоваться подключиться к событию и обработать его самостоятельно в коде программной части.

person apandit    schedule 17.03.2010
comment
Я не могу использовать привязку в Value-теге - person ErikTJ; 17.03.2010
comment
Вы не можете установить Binding on Value, потому что это не DependencyProperty. Однако, как сказал @apandit, DataTrigger — это то, что вам нужно! - person mg007; 18.03.2010