Как вызвать связанный элемент в WPF? - PullRequest
1 голос
/ 17 марта 2010

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

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

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

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

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

<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 значений, но вы можете использовать простой в соответствии с вашими потребностями.

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

0 голосов
/ 17 марта 2010

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


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

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

...